gpt4 book ai didi

c# - 使用 HttpClient 发送具有不同 header 的请求

转载 作者:行者123 更新时间:2023-11-30 21:32:09 27 4
gpt4 key购买 nike

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

最佳答案

您可以:

  • 在全局实例上设置默认 header
  • 创建多个具有不同默认配置的全局(逻辑)实例
  • 为每个请求设置(附加) header
  • 使用 IHttpClientFactory 创建新的 HttpClient

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

全局默认 header

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

 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");
});

稍后我们将注入(inject) IHttpClientFactory ,并像这样获取这个预配置的客户端:

var client = _clientFactory.CreateClient("github");

命名客户端的替代方案是“类型化客户端”:https://learn.microsoft.com/en-us/aspnet/core/fundamentals/http-requests?view=aspnetcore-5.0#typed-clients .这两种方法都会将基本配置保存在一个地方。

每个请求的 header

如果您的 header 仅属于单个请求,请简单地为每个请求设置它们。

var client = new HttpClient();

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

var response = await client.SendAsync(request);

使用这种方法,您可以使用共享的 HttpClient实例。

IHttpClientFactory

如果你想要一个新的“干净”的 HttpClient 实例,asp.net core 推荐的方法是注入(inject) IHttpClientFactory并使用 _clientFactory.CreateClient() .

public class MyService {
public MyService (IHttpClientFactory clientFactory)
{
_clientFactory = clientFactory;
}
public async Task DoSomething()
{
var client = _clientFactory.CreateClient();
// do request
}
}

关于c# - 使用 HttpClient 发送具有不同 header 的请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52468280/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com