.Net HttpClient 如何管理多种媒体类型

Posted

技术标签:

【中文标题】.Net HttpClient 如何管理多种媒体类型【英文标题】:How does .Net HttpClient manage to have multiple Media Types 【发布时间】:2015-01-13 09:25:02 【问题描述】:

我正在实现HttpWebRequest,并注意到Accept 属性的类型为string

 webRequest.Accept = "application/json";

HttpClient 的实现将 Accept 作为 HttpHeaderValueCollection<MediaTypeWithQualityHeaderValue> 的类型

clientRequest.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
clientRequest.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xml"));

这意味着您可以Add 任意数量的媒体类型。

但是根据this question,标准只允许你接受1 Content or Media Type。

那么,HttpClient 是如何支持多种媒体类型的呢?

【问题讨论】:

【参考方案1】:

您链接到的question 正在谈论响应中的Content-Type 标头。

您正在查看 requests 中的 Accept 标头。

服务器决定响应的特定内容类型(可能匹配也可能不匹配Accept 标头中的任何内容)。这是一个称为Content Negotiation的进程。

这在服务器端的具体工作方式取决于所使用的服务器技术。这里介绍一下它在ASP.Net MVC Web API的工作原理

【讨论】:

啊...感谢您的澄清!他们在我看来非常相似,因为你可以这样做request.ContentType = "application/json";

以上是关于.Net HttpClient 如何管理多种媒体类型的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Core中如何针对一个使用HttpClient对象的类编写单元测试

ASP.NET Core中如何针对一个使用HttpClient对象的类编写单元测试

如何在ASP.NET Core 中使用IHttpClientFactory

HttpClient请求头自定义

如何在使用 HttpClient 使用 Asp Net Web Api 的 Asp Net Mvc 中提供实时数据?

httpclient 4.5.1---连接管理