HttpClient 标头与 HttpRequestMessage 标头

问题描述 投票:0回答:1

我们什么时候应该在

HttpRequestMessage
对象中使用标题而不是
HttpClient
中的标题?

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

问题

  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");
    
c# asp.net-web-api httpclient asp.net-web-api2
1个回答
26
投票
  1. 哪个是首选方法?我是否应该向 HttpClient 添加通用标头(所有请求都相同)
  2. 和基于请求的标头到 HttpRequestMessage 对象 ??

您的问题是自动回答的。

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

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

  • 我需要在每个请求中发送一个 OAuth 不记名令牌,所以我在

    Authorization
    中设置了
    HttpClient.DefaultRequestHeaders
    标头,如果我需要刷新令牌,我只需要在那里再次设置它。

  • 我需要根据某些条件发送序列化为 JSON 或 XML 的实体。也就是说,我将在每个请求的基础上设置

    Content-type
    标头。

© www.soinside.com 2019 - 2024. All rights reserved.