我正在用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?
基于想要将所有响应作为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)
| 归档时间: |
|
| 查看次数: |
1697 次 |
| 最近记录: |