Sending requests with different headers using HttpClient

后端 未结 1 785
太阳男子
太阳男子 2021-01-14 19:23

There is a similar SO question here which talks about the performance of HttpClient objects and recommends to use one HttpClient instance per appli

相关标签:
1条回答
  • 2021-01-14 19:43

    You can:

    • Set default headers on your global instance
    • Create multiple global (logical) instances with different default configurations
    • Set (additional) headers per request
    • Create new HttpClient using IHttpClientFactory

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

    Global Default Headers

    Here you create one client instance and add headers that will be applied to all requests.

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

    Multiple Preconfigured Instances

    In this dotnet core 2.1 example, we register a preconfigured named instance:

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

    Headers per Request

    If your headers belong to a single request only, simple set them per request.

    var client = new HttpClient();
    
    var request = new HttpRequestMessage();
    request.Headers.Add("Content-Type", "text/plain");
    
    var response = await client.SendAsync(request);
    

    Using this approach you can use a shared HttpClient instance.

    IHttpClientFactory

    If you want a new "clean" HttpClient instance, the recommended approach for asp.net core is to inject IHttpClientFactory and use _clientFactory.CreateClient().

    public class MyService {
      public MyService (IHttpClientFactory clientFactory)
      {
        _clientFactory = clientFactory;
      }
      public async Task DoSomething()
      {
        var client = _clientFactory.CreateClient();
        // do request
      }
    }
    
    0 讨论(0)
提交回复
热议问题