Nancy将(404)JsonResponse转换为Html

时间:2014-08-19 20:24:10

标签: nancy

我有一个Nancy Fx应用程序,它充当一个纯API端点(仅限application / json,没有文本/ html或浏览器等访问)和一个返回例如以下内容:

return
    userExists
        ? Negotiate.WithStatusCode(HttpStatusCode.OK)
        : Negotiate.WithStatusCode(HttpStatusCode.NotFound);

然而,我注意到一个特殊性 - 客户端将Accept-Header设置为'application / json'并在此处执行GET请求,确实得到一个text / html响应,更糟糕的是 - 在.NotFound案例中是Nancy返回-specific / own 404错误,如果.OK由于缺少Views而发生异常。

对我来说更奇怪的是,在我的自定义IStatusCodeHandler中,我“看到”context.Response 一个JsonResponse,在管道的某个地方,这个被处理和(试图)转换不过,以某种方式进入text / html,我想知道为什么。

有什么方法可以阻止转换为text / html吗?

1 个答案:

答案 0 :(得分:5)

这是因为Nancy有DefaultStatusCodeHandler来处理500404个回复。这是在主机接管响应之前在Nancy管道中运行的最后一件事。

您所看到的是因为处理程序获得了404响应(尽管是JsonResponse),并且无法知道它是否是 hard (一条路线)根本不存在)或 soft (存在路由但返回404)状态代码,因此它将其转换为默认的404页面。您可能会认为它应该在执行此操作之前检查接受标头,但现在它不是。

如果您不想要此行为,可以通过覆盖引导程序中的InternalConfiguration属性来删除默认状态代码处理程序:

protected override NancyInternalConfiguration InternalConfiguration
{
    get
    {
        return NancyInternalConfiguration
            .WithOverrides(config => config.StatusCodeHandlers.Clear());
    }
}