我正试图让自己主持的南希回归剃刀观点,我无法让它发挥作用.南希源代码中的示例使用Web项目,但他们所拥有的页面并未说明这是必需的.我已经尝试指定配置部分,但他们又说" 这一步是完全可选的 "(斜体是他们的).通过源跟踪它看起来不像razor是一个有效的视图引擎,但我没有看到我可以在配置或我自己的NancyModule中添加它...任何帮助将不胜感激.

当我最终发现他们正在查看views文件夹时,似乎cshtml是受支持的扩展,但是DefaultViewFactory没有它与视图引擎关联,所以我得到null:

我的代码:
public Module1()
{
Get["/me"] = parms =>
{
return View["Static.html"]; // WORKS!
};
Get["/you"] = parms =>
{
dynamic model = new ExpandoObject();
//return View["~/Static.cshtml", model];
//return View["/Static.cshtml", model];
return View["Static.cshtml", model]; // blank page, no error or anything
};
}
Run Code Online (Sandbox Code Playgroud)
Static.cshtml只是一个html页面,上面写着"Hello,world!"
我正在创建一个最终将在Windows服务中托管的Nancy模块.我目前正在WPF测试应用程序中运行它.为了开始Nancy托管,我正在使用Nancy.Hosting.Self并致电:
nancyHost = new Nancy.Hosting.Self.NancyHost(new Uri("http://localhost:8080"));
nancyHost.Start();
Run Code Online (Sandbox Code Playgroud)
在我的本地计算机上,我可以通过在地址栏中输入http:// localhost:8080来访问Web浏览器并访问我的模块.
如果我去另一台机器,我无法访问该服务.我的Windows防火墙已关闭.
如果我在baseUri中使用localhost以外的任何东西启动托管,则在调用nancyHost.Start()时会出现"拒绝访问"异常;
有什么东西我错过了吗?我是否能够从任何机器访问Nancy模块,只要我知道IP:进行托管的机器的端口?是否有任何类型的"主机标题"我需要注意?
感谢您对此的帮助.
NancyFX是否支持像"Catch All"路由的ASP.NET MVC?我需要一个,基本匹配每个URL.这对于构建单页应用程序非常方便.
那可能吗?
我似乎无法在Nancy框架中的System.Web.HttpContext.Current.Server.MapPath()中找到Nancy中的等价物.
我只想加载相对于应用程序服务的文本文件.
我在集会中看到了这一点
using Nancy;
using System;
namespace Nancy.Hosting.Self
{
public class FileSystemRootPathProvider : IRootPathProvider, IHideObjectMembers
{
public FileSystemRootPathProvider();
public string GetRootPath();
}
}
Run Code Online (Sandbox Code Playgroud)
我不确定如何使用.
更新:我只是想出了我需要加载的任何东西都可以从bin/relase /目录中读取/写入.这是在Nancy Self Hosting环境中做到的假设方式吗?我想那是有道理的.
我正在尝试使用Nancy制作单页Web应用程序.因此,我希望我的根URL提供一个普通的.html文件,没有任何视图逻辑或任何东西.
我试过了
Get["/"] = parameters => Response.AsHtml("content/index.html")
Run Code Online (Sandbox Code Playgroud)
但是没有AsHtml.
我试过一个自定义引导程序
conventions.StaticContentsConventions.Add(
StaticContentConventionBuilder.AddFile("/", @"content/index.html")
);
Run Code Online (Sandbox Code Playgroud)
但显然它认为"/"不是一个文件 - 南希给了我一个目录列表http://localhost:<port>/.
我该怎么办?这应该不是这么难,对吧?
PS.任何方式关闭该目录列表?感觉不安全.
我正在开发Nancy Web服务,它将从客户端收集数据,这些数据将发送这样的HTTP请求
POST /iclock/cdata?SN=3163602360001&table=OPERLOG&OpStamp=426433018 HTTP/1.1
Host: 218.108.223.49:9001
User-Agent: iClock Proxy/1.09
Connection: close
Content-Length: 4883
Accept: */*
OPLOG 0\tab 0\tab 2012-09-07 11:36:39\tab 0\tab 0\tab 0\tab 0
OPLOG 3\tab 0\tab 2012-09-07 11:36:42\tab 55\tab 0\tab 0\tab 0
Run Code Online (Sandbox Code Playgroud)
问题是,我找不到在Nancy模块中收集这些数据的方法.有没有办法在Nancy模块中获取原始请求正文内容?
我有一个具有以下结构的json对象
{
ContainerType: "Box",
Items : [{Name: "Coin", Amount: 5}, {Name: "Spyglas", Amount : 1}]
}
Run Code Online (Sandbox Code Playgroud)
该对象在Nancy后端系统中有一个表示:
public string ContainerType {get; set}
public IEnumberable<Item> Items {get; set}
Run Code Online (Sandbox Code Playgroud)
其中Item(如预期)是一个非常简单的公共属性对象:
public string Name {get; set;}
public double Amount {get; set;}
Run Code Online (Sandbox Code Playgroud)
我的问题是,当我在我的模块中收到Post(基于NancyModule)时,只有字符串属性被绑定在这行代码中:
var model = this.databind<MyContainerModel>();
Run Code Online (Sandbox Code Playgroud)
我已尝试将列表类型更改为更具体(List <MyContainerModel>),更改为Arrays(MyContainerModel []),但似乎没有任何效果.
Nancy的git-repo演示部分中的数据绑定示例仅涉及整数的反序列化,但我的问题是使用javascript对象对数组进行反序列化.
有任何想法吗?
谢谢!
我正在我的应用程序中运行一个自托管的NancyFX Web服务器.现在我有一个托管的模块:
public class MetricsModule : NancyModule
{
private IStorageEngine _storageEngine;
public MetricsModule(IStorageEngine storageEngine) : base("/metrics")
{
_storageEngine = storageEngine;
Get["/list"] = parameters =>
{
var metrics = _storageEngine.GetKnownMetrics();
return Response.AsJson(metrics.ToArray());
};
Get["/query"] = parameters =>
{
var rawStart = parameters.start;
var rawEnd = parameters.end;
var metrics = parameters.metrics;
return Response.AsJson(0);
};
}
}
Run Code Online (Sandbox Code Playgroud)
我的Bootstrapper类是:
public class OverlookBootStrapper : DefaultNancyBootstrapper
{
private readonly IStorageEngine _storageEngine;
public OverlookBootStrapper(IStorageEngine storageEngine)
{
_storageEngine = storageEngine;
}
protected override void ConfigureApplicationContainer(TinyIoCContainer container)
{
container.Register(_storageEngine); …Run Code Online (Sandbox Code Playgroud) 在ASP.NET中,每当我在VS2012中以调试模式运行服务器时,我对静态内容(js,css等)所做的任何更改都会在保存后立即反映出来.
在NancyFX中,我每次更改静态内容时都需要重新启动服务器.我假设这是因为VS每次运行服务器时都需要将静态内容复制到输出目录.
无论如何反映保存后立即对静态内容所做的更改?
这是我对静态内容的配置
public class MainBootstrapper : DefaultNancyBootstrapper
{
protected override void ConfigureConventions(NancyConventions nancyConventions)
{
nancyConventions.StaticContentsConventions.Add(StaticContentConventionBuilder.AddDirectory("Scripts"));
base.ConfigureConventions(nancyConventions);
}
}
Run Code Online (Sandbox Code Playgroud)
这也许是相关的.我在一个控制台应用程序下运行它,其中nancyfx主循环编写如下:
class Program
{
const ushort port = 64402;
const string escapeString = "/Terminate";
static void Main(string[] args)
{
NancyHost host;
#region Making new instance of NancyHost
var uri = new Uri("http://localhost:" + port + "/");
var config = new HostConfiguration(); config.UrlReservations.CreateAutomatically = true;
host = new NancyHost(config, uri);
#endregion
#region NancyFX hosting loop
try
{
host.Start();
Console.Write("Start hosting the …Run Code Online (Sandbox Code Playgroud) 有没有办法为Nancy服务自动生成Swagger文档(或类似文档)?
我找到了Nancy.Swagger,但是没有关于如何使用它的信息,并且演示应用程序似乎没有演示生成文档(如果有的话,它并不明显).
任何帮助,将不胜感激.谢谢!