HttpClient Headers 与 HttpRequestMessage Headers

HttpClient Headers vs HttpRequestMessage Headers

我们什么时候应该在 HttpRequestMessage object 中使用 headers 而不是在 HttpClient 中使用 headers ??

我们需要添加授权(总是在变化)和一些自定义 headers(总是在变化)

问题

  1. 首选方法是什么?
  2. 我应该添加普通的吗 headers(所有请求都相同)到 HttpClient 并请求 基于 headers 到 HttpRequestMessage object ??

       //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. Which is the preferred method ? Should i be adding common headers (same across all the requests) to the HttpClient
  2. and request based headers to the HttpRequestMessage object ??

您的问题 auto-answered 本身。

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

什么时候应该使用一个而不是另一个?我将使用两个示例:

  • 我需要在每个请求中发送一个 OAuth 持有者令牌,所以我在 HttpClient.DefaultRequestHeaders 中设置了 Authorization header,如果我需要刷新令牌,我只需要在那里重新设置即可。

  • 我需要根据某些条件发送序列化为 JSON 或 XML 的实体。也就是说,我将在 per-request 基础上设置 Content-type header。