代码之家  ›  专栏  ›  技术社区  ›  user1451111

使用HttpClient发送具有不同头的请求

c#
  •  2
  • user1451111  · 技术社区  · 7 年前

    有一个类似的 SO question here HttpClient 对象并建议使用 HttpClient公司 每个应用程序的实例。我的项目要求我向同一个URI发送多个webservice请求,但每个请求具有不同的头集。我应该创建一个新的 HttpClient公司 DefaultRequestHeaders 如果我使用 static 实例。

    1 回复  |  直到 7 年前
        1
  •  4
  •   Christoph Lütjen    7 年前

    你可以:

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

    文件: 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);
    

    多个预配置实例

    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 Core2.1,建议的方法似乎是 IHttpClientFactory 使用 _clientFactory.CreateClient() 得到一个 实例。