在我的web api初始化中使用以下代码我已禁用XmlFormatter以便只支持json:
config.Formatters.Remove(config.Formatters.XmlFormatter);
现在,当客户端使用Accept:application / xml标头发出请求时,它将返回json而不是XML。我发现这种行为是错误的。如果客户端要求XML并且不支持,则应该收到UnsupportedMediaType错误。
你知道我在我的应用程序中如何在全球范围内实现这一目标吗?
答案 0 :(得分:1)
默认情况下,如果Web API无法使用Accept
或Content-Type
标头确定格式化程序,它将回退到可以序列化当前DTO类型的第一个格式化程序 - 并且开箱即用,JSON formatter配置为适用于所有类型,因此它始终是"最后的手段"回退。
您可以通过修改DefaultContentNegotiator
来停用该后备广告。
var config = new HttpConfiguration();
var negotiator = new DefaultContentNegotiator(excludeMatchOnTypeOnly: true);
config.Services.Replace(typeof(IContentNegotiator), negotiator);
将excludeMatchOnTypeOnly
设置为true
后,Web API将开始向无法确定格式化程序的请求发出406响应(Not Acceptable
) - 例如您的例。这符合RFC 2616,其中规定:
HTTP / 1.1定义300(多项选择)和406(不可接受) 用于在服务器启用时启用代理驱动的协商的状态代码 不愿意或无法使用服务器驱动提供不同的响应 协商。
您可以找到示例VS解决方案here。