HttpClient标头与HttpRequestMessage标头

use*_*839 13 c# httpclient asp.net-web-api asp.net-web-api2

什么时候我们应该在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");
    
    Run Code Online (Sandbox Code Playgroud)

Mat*_*zer 15

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

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

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

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

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

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