.Net Core 中使用 HttpClient

目录

    • 前言:
    • 一、正确使用 HttpClient 的示例
    • 二、使用 IHttpClientFactory 实现
        • 1. 基本使用
        • 2. 命名不同的配置
    • 参考文档

前言:

HttpClient 旨在实例化一次,并在应用程序的整个生命周期内重复使用。
实例化每个请求的 HttpClient 类将耗尽重负载下可用的插槽数。 这将导致 SocketException 错误。

一、正确使用 HttpClient 的示例

在使用 HttpClient 时应该使用单例模式。

	public class GoodController : ApiController
	{
     
    	private static readonly HttpClient HttpClient;

    	static GoodController()
    	{
     
        	HttpClient = new HttpClient();
    	}
	}

二、使用 IHttpClientFactory 实现

在 .Net Core 2.1 后引入了 HttpClientFactory

1. 基本使用

	// 在容器中注册服务
	services.AddHttpClient();

使用构造函数注入使用 IHttpClientFactory

    IHttpClientFactory _httpClientFactory;
    
    public HomeController(IHttpClientFactory httpClientFactory)
    {
     
        _httpClientFactory = httpClientFactory;
    }
    
    [HttpGet]
    public async void Get()
    {
     
        var request = new HttpRequestMessage(HttpMethod.Get, "http://localhost:5000/Home/Index");
        var client = _httpClientFactory.CreateClient();
        var response = await client.SendAsync(request);
        var httpContent = response.Content;
        var result = await httpContent.ReadAsStringAsync();
    }

2. 命名不同的配置

	// 在容器中注册服务
    services.AddHttpClient();
    services.AddHttpClient("local", c =>
    {
     
        c.BaseAddress = new Uri("http://localhost:5000");
        c.DefaultRequestHeaders.Add("Accept", "application/json");
    });

使用构造函数注入使用 IHttpClientFactory

    IHttpClientFactory _httpClientFactory;
    
    public HomeController(IHttpClientFactory httpClientFactory)
    {
     
        _httpClientFactory = httpClientFactory;
    }
    
    [HttpGet]
    public async void Get()
    {
     
        var client = _httpClientFactory.CreateClient("local");
        var response = await client.GetAsync("Home/Index");
        HttpContent httpContent = response.Content;
        var result = await httpContent.ReadAsStringAsync();
    }

参考文档

  • Docs.Microsoft - HttpClient Class

你可能感兴趣的:(C#,HttpClient,C#)