ASP.Net WebAPI 在不同的用户代理中有不同的内容类型

ASP.Net WebAPI has different content type in different user agents

我正在尝试学习 ASP.Net WebAPI,但我很难弄清楚发生了什么。我创建了一个包含如下操作的小型应用程序:

public IHttpActionResult Hello() 
{
    return Ok("Hi");
}

这很好用,所以我在浏览器中查看它。我看到了:

<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">Hi</string>

这正在使用 Chrome。我使用扩展来查看内容类型,它是 text/xml。我想进一步检查一下,所以我使用 Postman REST Client 来测试它。我看到:"Hi",内容类型是 application/json。我完全糊涂了。我认为 Postman 只是在更改内容类型,但为了确定我安装了另一个 REST 客户端,但它返回了 application/json。在 Internet Explorer 中,它尝试将结果下载为 JSON 文件。到底他妈发生了什么。有没有办法让我拥有通用的内容类型?

Web api 可以序列化对 Xml 或 Json 的响应。它读取 Content-Type Http header 来确定是哪一个。使用 fiddler 检查来自浏览器的请求。默认情况下,Postman 将 application/json 作为内容类型传递 - 因此您会得到 json 响应。

您可以将以下代码添加到您的 WebApiConfig 文件以删除 XML 序列化程序,它将始终 return json.

var appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(t => t.MediaType == "application/xml");
    config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType);