我正在使用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并且即使正文为空也会失败并显示错误。
我能够像这样强制内容类型:
return Negotiate
.WithContentType("application/json")
.WithStatusCode(HttpStatusCode.OK);
我不想在任何地方重复这段代码。当然,我可以在一个函数中抽象出来,但我正在寻找更优雅的解决方案。
有没有办法覆盖默认的内容类型的响应,以便return HttpStatusCode.OK
将我的内容类型设置为application/json
?
答案 0 :(得分:6)
基于想要将所有响应作为JSON返回的假设,您将需要一个自定义引导程序。如果您喜欢使用插入而不是清除响应处理器,则可以进一步增强此功能,因此可以使用XML处理器等的后备。
这将由Nancy自动选择,无需额外配置。
public class Bootstrap : DefaultNancyBootstrapper
{
protected override NancyInternalConfiguration InternalConfiguration
{
get
{
return NancyInternalConfiguration.WithOverrides(
(c) =>
{
c.ResponseProcessors.Clear();
c.ResponseProcessors.Add(typeof(JsonProcessor));
});
}
}
}