我正在开展一个项目,我们希望限制我们接受的内容类型的数量,并在遇到无效的内容类型时抛出相应的错误。
目前,我们从允许的格式化程序列表中删除XmlFormatter,只留下JSON作为选项。这会对接受或内容类型标头中的所有未知内容类型默认为JSON。
但是,我想修改内容协商,以便对XML或vCard或任何非JSON内容类型的请求将抛出 HTTP 406 Not Acceptable error 。
最佳做法是什么?我应该设置全局过滤器吗?我应该创建自己的ContentNegotiator并替换全局配置中的默认值吗?
与/ modify交互的堆栈的正确级别是什么?
答案 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
响应。