使用HttpClient

时间:2018-09-23 16:51:57

标签: c#

有一个类似的SO question here讨论了HttpClient对象的性能,并建议每个应用程序使用一个HttpClient实例。我的项目要求我向同一个URI发送多个Web服务请求,但每个请求都具有不同的标头集。我应该为每个请求创建一个新的HttpClient实例,但要知道,如果使用DefaultRequestHeaders实例,static对于所有请求都是相同的。

1 个答案:

答案 0 :(得分:1)

您可以:

  • 在全局实例上设置默认标头
  • 使用不同的默认配置创建多个全局实例
  • 为每个请求设置(附加)标头

文档:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/http-requests?view=aspnetcore-2.1

全局默认标题

在这里创建一个客户端实例,并添加将应用于所有请求的标头。

 var client = new HttpClient();
 client.DefaultRequestHeaders.Add("Content-Type", contentTypeValue);

多个预配置实例

在这个dotnet core 2.1示例中,我们注册了一个预配置的命名实例:

services.AddHttpClient("github", c =>
{
    c.BaseAddress = new Uri("https://api.github.com/");
    // Github API versioning
    c.DefaultRequestHeaders.Add("Accept", "application/vnd.github.v3+json");
    // Github requires a user-agent
    c.DefaultRequestHeaders.Add("User-Agent", "HttpClientFactory-Sample");
});

每个请求的标题

如果您的标头仅属于一个请求,则可以为每个请求简单地设置它们。

var client = new HttpClient();

var request = new HttpRequestMessage();
request.Headers.Add("Content-Type", "text/plain");

var response = await client.SendAsync(request);

使用这种方法,您可以使用共享的HttpClient实例。对于asp.net core 2.1,推荐的方法似乎是注入IHttpClientFactory并使用_clientFactory.CreateClient()来获得HttpClient实例。