c# - 覆盖 NancyFx 中响应的默认内容类型

标签 c# nancy

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

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

客户端始终假定 application/json 作为所有响应的内容类型。它实际上在请求中设置了 Accept: application/json。没有 application/json 的响应是错误的,与实际正文无关。它只是检查内容类型并在不匹配 json 时中止。我无法改变这种行为。

现在我面临的问题是,通过简单地返回 HttpStatusCode.OK Nancy 设置 Content-Type: text/html 但正如所说,客户端假定 application/json 并失败即使 body 是空的也会出错。

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

return Negotiate
    .WithContentType("application/json")
    .WithStatusCode(HttpStatusCode.OK);

我不想到处重复这段代码。当然,我可以将其抽象为一个函数,但我正在寻找更优雅的解决方案。

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

最佳答案

基于希望将所有响应作为 JSON 返回的假设,您将需要一个自定义 Bootstrap 。如果你喜欢使用插入而不是清除响应处理器,你可以进一步增强它,因此使用 XML 处理器等的回退是可能的。

这将由 Nancy 自动获取,无需额外配置。

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

关于c# - 覆盖 NancyFx 中响应的默认内容类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31819021/

相关文章:

asp.net-core - NancyFx 与 .Net Core 不兼容

c# - 南希FX : how to get posted form value?

javascript - 使用 jQuery 将无序列表所选项目传递到 ASP.NET Web 窗体

c# - 集成 Facebook 聊天

c# - 无法让 System.Web.Optimization 与 Nancy Self Hosting 一起运行

http-headers - 我如何访问 NancyFX 请求 header 值

asp.net-mvc - 为自托管 NancyFx 复制 Razor View ?

c# - IE 和 Mozilla Firefox 之间的 JavaScript 行为差异?

c# - PostAsync 后未收到响应

c# - 为什么这个赋值不是线程安全的?