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

时间:2015-05-31 23:31:29

标签: c# asp.net rest asp.net-web-api user-agent

我正在尝试学习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文件。到底他妈发生了什么。有没有办法可以拥有通用内容类型?

1 个答案:

答案 0 :(得分:1)

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

您可以将以下代码添加到WebApiConfig文件中以删除XML序列化程序,它将始终返回json。

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