拒绝HTTP 406不可接受的无效内容类型

时间:2014-02-18 17:05:10

标签: asp.net asp.net-web-api

我正在开展一个项目,我们希望限制我们接受的内容类型的数量,并在遇到无效的内容类型时抛出相应的错误。

目前,我们从允许的格式化程序列表中删除XmlFormatter,只留下JSON作为选项。这会对接受或内容类型标头中的所有未知内容类型默认为JSON。

但是,我想修改内容协商,以便对XML或vCard或任何非JSON内容类型的请求将抛出 HTTP 406 Not Acceptable error

最佳做法是什么?我应该设置全局过滤器吗?我应该创建自己的ContentNegotiator并替换全局配置中的默认值吗?

与/ modify交互的堆栈的正确级别是什么?

1 个答案:

答案 0 :(得分:1)

关于“接受标头”中不支持的媒体类型
excludeMatchOnTypeOnly上的DefaultContentNegotiator设置会导致服务针对未知媒体类型发回406响应,而不是默认为JSON:

DefaultContentNegotiator defaultNegotiator = new DefaultContentNegotiator(excludeMatchOnTypeOnly: true);
config.Services.Replace(typeof(IContentNegotiator), defaultNegotiator);

关于发布未知内容媒体类型
这取决于您使用的Web API版本。在Web API 2及更高版本中,当客户端使用服务不支持的内容类型发布数据时,您应该会看到415 Unsupported Media Type响应。