覆盖 NancyFx 中响应的默认内容类型
Override the default Content-Type for responses in NancyFx
我正在使用 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
?
基于希望 return 所有响应都为 JSON 的假设,您将需要一个自定义引导程序。如果您喜欢使用插入而不是清除响应处理器,则可以进一步增强此功能,因此可以使用 XML 处理器等进行回退。
这将由 Nancy 自动获取,无需额外配置。
public class Bootstrap : DefaultNancyBootstrapper
{
protected override NancyInternalConfiguration InternalConfiguration
{
get
{
return NancyInternalConfiguration.WithOverrides(
(c) =>
{
c.ResponseProcessors.Clear();
c.ResponseProcessors.Add(typeof(JsonProcessor));
});
}
}
}
我正在使用 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
?
基于希望 return 所有响应都为 JSON 的假设,您将需要一个自定义引导程序。如果您喜欢使用插入而不是清除响应处理器,则可以进一步增强此功能,因此可以使用 XML 处理器等进行回退。
这将由 Nancy 自动获取,无需额外配置。
public class Bootstrap : DefaultNancyBootstrapper
{
protected override NancyInternalConfiguration InternalConfiguration
{
get
{
return NancyInternalConfiguration.WithOverrides(
(c) =>
{
c.ResponseProcessors.Clear();
c.ResponseProcessors.Add(typeof(JsonProcessor));
});
}
}
}