在一个项目中,我正在使用Nancy通过Nancy Self-Host提供基本的Web内容。这通常有效,但不幸的是,在端点上运行查询即http://localhost/data.json
会导致模块收到http://localhost/data
的请求网址。
当我查询localhost/data.json
时,我在JSON中获得了nancy生成的404响应。我不知道为什么会发生这种情况,并且无法在任何地方找到这种行为。
这是我的模块:
public class NancySimpleWebModule : NancyModule
{
/// <summary>
/// TODO - HACK!
/// </summary>
public static NancySimpleWebServer WebServer;
public NancySimpleWebModule()
{
Get["/"] = Get[@"/{url*}"] = _ =>
{
string filePath = WebServer.ResolveFilePath(Request.Url.Path.Trim('/', '\\'));
if (filePath == null || filePath.Length == 0 || !File.Exists(filePath))
return new Response { StatusCode = HttpStatusCode.NotFound };
return File.ReadAllText(filePath);
};
}
}
以下是我启动服务器的方法:
_host = new NancyHost(
new HostConfiguration { UrlReservations = new UrlReservations { CreateAutomatically = true } },
uriToBind);
_host.Start();
非常感谢任何想法或建议。
答案 0 :(得分:2)
根据#1919,#2671和#2711这是设计使然,您无法将其停用:
这是content negotiation的一项功能。
.xml
和.json
都会发生这种情况。
建议的解决方法是在扩展名后添加内容(GET /foo/bar.json/baz
)或重命名文件(/foo/bar.js
)。
答案 1 :(得分:0)
您可以使用以下引导程序代码覆盖配置:
public class Bootstrapper : DefaultNancyBootstrapper
{
protected override NancyInternalConfiguration InternalConfiguration
{
get
{
return NancyInternalConfiguration.WithOverrides(x =>
{
// Otherwise '.xml' and '.json' will get stripped off request paths
x.ResponseProcessors = new List<Type>
{
typeof(ResponseProcessor),
typeof(ViewProcessor)
};
});
}
}
}
https://github.com/NancyFx/Nancy/issues/2671#issuecomment-349088969