问题 HttpClient Headers与HttpRequestMessage标头


什么时候我们应该在HttpClient中的头文件中使用HttpRequestMessage对象中的头文件?

我们需要添加授权(始终更改)和少量自定义标头(始终更改)

问题

  1. 哪种方法首选?
  2. 我应该加入常见的     HttpClient和请求的标头(在所有请求中相同)     基于HttpRequestMessage对象的头文件?

       //HttpRequestMessage Code
        HttpRequestMessage reqmsg =new HttpRequestMessage();
        reqmsg.Headers.Authorization =new AuthenticationHeaderValue("some scheme");
        reqmsg.Headers.Add("name","value");
    
        //HttpClient Code
        HttpClient client =new HttpClient();
        client.DefaultRequestHeaders.Authorization =new AuthenticationHeaderValue("some scheme");
        client.DefaultRequestHeaders.Add("name", "value");
    

1326
2017-10-03 13:29


起源

也许是一个挑剔,但目前的想法似乎是将HttpClient实例化为单例,而不是作为一个短命的对象(在这种情况下,不要忘记Dispose / use'using')。 - Max Barraclough


答案:


  1. 哪种方法首选?我应该在HttpClient中添加公共标头(在所有请求中都相同)
  2. 并请求基于HttpRequestMessage对象的头?

您的问题会自动自动回答。

DefaultRequestHeaders 是任何请求的一部分,这是一个加号,因为你将能够避免重复自己再次添加一些标题。另一方面, HttpRequestMessage.Headers 将只是该请求的一部分。

什么时候应该使用另一个?我将使用两个例子:

  • 我需要发送OAuth承载令牌作为每个请求的一部分,所以我设置了 Authorization 标头在 HttpClient.DefaultRequestHeaders,如果我需要刷新令牌,我只需要在那里再次设置它。

  • 我需要发送一个序列化为JSON或XML的实体,具体取决于某些条件。也就是说,我会设置 Content-type 每个请求的标头。


9
2017-10-03 14:11