【问题标题】:ASP.Net WebAPI has different content type in different user agentsASP.Net WebAPI 在不同的用户代理中有不同的内容类型
【发布时间】:2015-06-01 07:43:13
【问题描述】:

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

【问题讨论】:

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


【解决方案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);

【讨论】:

  • 有什么方法可以阻止 IE 尝试下载响应?
  • 我不知道,因为我从不使用 IE。但是没有理由在不同的浏览器上测试 web api 响应,因为用户代理不会影响响应。 (除非您专门做用户代理特定的事情)。所以只需使用 chrome 和/或邮递员。
  • 你可以修改注册表,让IE能够“原地浏览”json内容....见codeproject.com/Tips/216175/View-JSON-in-Internet-Explorer
猜你喜欢
  • 1970-01-01
  • 2023-01-26
  • 1970-01-01
  • 1970-01-01
  • 2011-06-09
  • 2012-10-02
  • 1970-01-01
  • 2020-11-03
  • 1970-01-01
相关资源
最近更新 更多