HttpClient标头与HttpRequestMessage标头

时间:2015-10-03 13:29:58

标签: c# asp.net-web-api httpclient 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");
    

1 个答案:

答案 0 :(得分:11)

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

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

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

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

  • 我需要在每个请求中发送OAuth承载令牌,因此我在Authorization中设置HttpClient.DefaultRequestHeaders标头,如果我需要刷新令牌,我只需要再次设置它。

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