C# 添加 Accept header 到 HttpClient
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 是字符串类型的 collection,您可以在其中添加 header 以接受使用 [= 的新实例11=].
client.DefaultRequestHeaders 是一个字典,它接受请求 header 的键和值,并根据它们匹配结果。
DefaultRequestHeaders
有过载。
它们之间唯一不同的是 DefaultRequestHeaders.Accept
将要求您初始化 MediaTypeWithQualityHeaderValue
class 的新实例,从而在堆中产生另一个引用类型, 而 client.DefaultRequestHeaders
会将数据添加到字典中,从而消除了资源成本和初始化新实例的需要。
如何使用以及使用什么完全取决于用户。
我不认为有什么区别,这只是通过 Accept 等属性添加标准 headers 的一种更简单的方法,通过 Add 方法添加自定义 headers 也很方便。
只要名称和值正确,最终结果没有区别。
HTTP 标准指定certain headers have a quality factor, hence the name MediaTypeWithQualityHeaderValue. It's a MediaType header value that can have a Quality factor. You can pass the quality factor if you use the MediaTypeWithQualityHeaderValue Constructor (String, Double) 构造函数
标准中的 Accept
header 部分显示了几个使用品质因数的示例。例如,
The example
Accept: audio/*; q=0.2, audio/basic
SHOULD be interpreted as "I prefer audio/basic, but send me any audio type if it is the best available after an 80% mark-down in quality."
你可以用
来写
var requestAccepts=client.DefaultRequestHeaders.Accept;
requestAccepts.Add(new MediaTypeWithQualityHeaderValue("audio/*",0.2));
requestAccepts.Add(new MediaTypeWithQualityHeaderValue("audio/basic"));
或者您可以输入原始 header 值:
client.DefaultRequestHeaders.Add("Accept", "audio/*; q=0.2, audio/basic");
这两个调用有什么区别?我的最终目标是拥有
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 是字符串类型的 collection,您可以在其中添加 header 以接受使用 [= 的新实例11=].
client.DefaultRequestHeaders 是一个字典,它接受请求 header 的键和值,并根据它们匹配结果。
DefaultRequestHeaders
有过载。
它们之间唯一不同的是 DefaultRequestHeaders.Accept
将要求您初始化 MediaTypeWithQualityHeaderValue
class 的新实例,从而在堆中产生另一个引用类型, 而 client.DefaultRequestHeaders
会将数据添加到字典中,从而消除了资源成本和初始化新实例的需要。
如何使用以及使用什么完全取决于用户。
我不认为有什么区别,这只是通过 Accept 等属性添加标准 headers 的一种更简单的方法,通过 Add 方法添加自定义 headers 也很方便。
只要名称和值正确,最终结果没有区别。
HTTP 标准指定certain headers have a quality factor, hence the name MediaTypeWithQualityHeaderValue. It's a MediaType header value that can have a Quality factor. You can pass the quality factor if you use the MediaTypeWithQualityHeaderValue Constructor (String, Double) 构造函数
标准中的 Accept
header 部分显示了几个使用品质因数的示例。例如,
The example
Accept: audio/*; q=0.2, audio/basic
SHOULD be interpreted as "I prefer audio/basic, but send me any audio type if it is the best available after an 80% mark-down in quality."
你可以用
来写var requestAccepts=client.DefaultRequestHeaders.Accept;
requestAccepts.Add(new MediaTypeWithQualityHeaderValue("audio/*",0.2));
requestAccepts.Add(new MediaTypeWithQualityHeaderValue("audio/basic"));
或者您可以输入原始 header 值:
client.DefaultRequestHeaders.Add("Accept", "audio/*; q=0.2, audio/basic");