NancyFx查询JSON文件,从请求URL中剥离JSON扩展

时间:2017-06-09 16:19:47

标签: nancy self-hosting

在一个项目中,我正在使用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();

非常感谢任何想法或建议。

2 个答案:

答案 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