[英]C# Add Accept header to HttpClient
这两个电话有什么区别? 我的最终目标是通过网络发送Accept: application/json
,而不是附加到某些默认的其他MIME类型集。
HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Add("Accept", "application/json");
与
client.DefaultRequestHeaders
.Accept
.Add(new MediaTypeWithQualityHeaderValue("application/json"));
我的CLR是.NET Core 2.0。
嗅探电线显示没有区别:
# just .Add("Accept"...
~ % nc -l 8000
GET / HTTP/1.1
Connection: Keep-Alive
Accept: application/json
[...]
# with MediaTypeWithQualityHeaderValue
~ % nc -l 8000
GET / HTTP/1.1
Connection: Keep-Alive
Accept: application/json
[...]
那么,除了这种奇怪的命名之外,没有什么可以在这里获得的吗?
没有区别。
DefaultRequestHeaders.Accept是字符串类型的集合,您可以使用MediaTypeWithQualityHeaderValue
的新实例添加要接受的标头。
client.DefaultRequestHeaders是一个字典,它接受请求标头的key和value,并根据它们匹配结果。
DefaultRequestHeaders
有重载。
它们之间唯一不同的是, DefaultRequestHeaders.Accept
将要求您初始化MediaTypeWithQualityHeaderValue
类的新实例,从而导致堆中的另一个引用类型,而client.DefaultRequestHeaders
将数据添加到字典中,删除资源成本和初始化新实例的需要。
用户应该如何使用以及使用什么,这完全取决于用户。
只要名称和值正确,最终结果就没有区别。
HTTP标准指定某些标头具有品质因数 ,因此名称为MediaTypeWithQualityHeaderValue 。 它是一个可以具有品质因数的MediaType标头值。 如果使用MediaTypeWithQualityHeaderValue构造函数(String,Double)构造函数,则可以传递质量因子
标准中的Accept
标题部分显示了几个使用品质因数的示例。 例如,
这个例子
Accept: audio/*; q=0.2, audio/basic
应该被解释为“我更喜欢音频/基本,但如果在质量降低80%之后它是最好的音频类型,请发送给我任何音频类型。”
你可以用它来写
var requestAccepts=client.DefaultRequestHeaders.Accept;
requestAccepts.Add(new MediaTypeWithQualityHeaderValue("audio/*",0.2));
requestAccepts.Add(new MediaTypeWithQualityHeaderValue("audio/basic"));
或者您可以输入原始标头值:
client.DefaultRequestHeaders.Add("Accept", "audio/*; q=0.2, audio/basic");
我认为不存在差异,它只是通过Accept等属性添加标准头文件的一种简单方法,也方便通过Add方法添加自定义头文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.