覆盖NancyFx中响应的默认Content-Type

MBu*_*lli 4 c# nancy

我正在用NancyFx编写REST API.我经常得到这样的代码:

Post["/something"] = _ => {
// ... some code
if (success) 
    return HttpStatusCode.OK;
else
    return someErrorObject;
};
Run Code Online (Sandbox Code Playgroud)

客户端始终假定application/json为所有响应的内容类型.它实际上是Accept: application/json在请求中设置的.application/json无论实际身体如何,没有错误的回答都是错误的.它只是检查内容类型,如果它与json不匹配则中止.我无法改变这种行为.

现在我面临的问题是,只需返回HttpStatusCode.OKNancy集,Content-Type: text/html但正如所说客户端假定application/json并且即使正文为空也会失败并出现错误.

我能够像这样强制内容类型:

return Negotiate
    .WithContentType("application/json")
    .WithStatusCode(HttpStatusCode.OK);
Run Code Online (Sandbox Code Playgroud)

我不想在任何地方重复这个代码.当然,我可以在一个函数中抽象它,但我正在寻找一个更优雅的解决方案.

有没有办法覆盖默认的Content-Type响应,以便return HttpStatusCode.OK将我的Content-Type设置为application/json

Dr *_*izo 7

基于想要将所有响应作为JSON返回的假设,您将需要一个自定义引导程序.如果您愿意使用插入而不是清除响应处理器,则可以进一步增强此功能,因此可以使用XML处理器等的后备.

这将由Nancy自动选择,无需额外配置.

public class Bootstrap : DefaultNancyBootstrapper
{
    protected override NancyInternalConfiguration InternalConfiguration
    {
        get
        {
            return NancyInternalConfiguration.WithOverrides(
                (c) =>
                {
                    c.ResponseProcessors.Clear();
                    c.ResponseProcessors.Add(typeof(JsonProcessor));
                });
        }
    }
}
Run Code Online (Sandbox Code Playgroud)