请求的web api格式化程序丢失时返回错误/异常

时间:2014-09-16 09:44:30

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

在我的web api初始化中使用以下代码我已禁用XmlFormatter以便只支持json:

config.Formatters.Remove(config.Formatters.XmlFormatter);

现在,当客户端使用Accept:application / xml标头发出请求时,它将返回json而不是XML。我发现这种行为是错误的。如果客户端要求XML并且不支持,则应该收到UnsupportedMediaType错误。

你知道我在我的应用程序中如何在全球范围内实现这一目标吗?

1 个答案:

答案 0 :(得分:1)

默认情况下,如果Web API无法使用AcceptContent-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