.Net Core 中使用 HttpClient

前言:

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

参考文档

猜你喜欢

转载自blog.csdn.net/Upgrader/article/details/107926470