龙岩做网站的地方有哪些,做门名片设计网站,遵义网约车平台,查备案网站前言在NET Core2.1后也是增加更新了很多东西,当然HttpClientFactory更新中的一部分.虽然说HttpClient这个实现了disposable,但使用它的时候用using包装块的方式通常不是最好的选择。处理HttpClient,底层socket套接字不会立即释放。该HttpClient类是未多个请求重复使用而创建的。… 前言在NET Core2.1后也是增加更新了很多东西,当然HttpClientFactory更新中的一部分.虽然说HttpClient这个实现了disposable,但使用它的时候用using包装块的方式通常不是最好的选择。处理HttpClient,底层socket套接字不会立即释放。该HttpClient类是未多个请求重复使用而创建的。需要不同的基地址,不同的HTTP 标头和其他对请求个性化操作的场景时,需要动手管理多个HttpClient实例,为了简化HttpClient实例管理,.NET Core 2.1提供了一个新的HTTPClientFactory - 它可以创建缓存和处理HttpClient实例。什么是HttpClientFactory从ASPNET Core开始,Polly与IHttpClientFastory集成。HttpClientFastory是一个简化管理和使用的HttpClientory。用ASP.Net团队的话说:“an opinionated factory for creating HttpClient instances”一个用于创建HttpClient实例的最佳实践的工厂提供命名和配置逻辑HttpClient 对象的中心位置。例如您可以配置预先配置为访问特定微服务的客户端服务代理。通过委派处理程序HttpClient 并实施基于Polly 的中间件来利用Polly 的弹性策略对传出中间件的概念进行编码。HttpClient 已经有了委托处理程序的概念这些处理程序可以链接在一起用于传出HTTP 请求。您将HTTP 客户端注册到工厂中并且可以使用Polly处理程序将Polly策略用于RetryCircuitBreakers 等。管理生命周期HttpClientMessageHandlers 以避免在管理HttpClient 自己的生命周期时可能发生的上述问题/问题。HttpClientFactory简单使用Startup添加services.AddHttpClient();通过IHttpClientFactory创建一个HttpClient对象,后面操作如旧,但是不需要关心其资源释放using Microsoft.AspNetCore.Mvc;
using System.Net.Http;
using System.Threading.Tasks;namespace HttpClientFactoryPolly.Controllers
{[Route(api/[controller])][ApiController]public class ValuesController : ControllerBase{private readonly IHttpClientFactory _httpClientFactory;public ValuesController(IHttpClientFactory httpClientFactory){this._httpClientFactory httpClientFactory;}[HttpGet]public async TaskActionResultstring Get(){var client _httpClientFactory.CreateClient();var result await client.GetStringAsync(https://www.microsoft.com/zh-cn/);return result;}}
}
配置HttpClientFactory Polly这边采用命名客户端演示该栗子(如果应用需要有许多不同的 HttpClient 用法每种用法的配置都不同可以视情况使用命名客户端。可以在 HttpClient 中注册时指定命名 Startup.ConfigureServices 的配置。)PackagePM Install-package Microsoft.Extensions.Http.PollyStartup services.AddHttpClient(github,c {c.BaseAddress new System.Uri(https://api.github.com/);c.DefaultRequestHeaders.Add(Accept, application/vnd.github.v3json);c.DefaultRequestHeaders.Add(User-Agent, HttpClientFactory-Sample);});[HttpGet({id})]
public async TaskActionResultstring Get(int id)
{var request new HttpRequestMessage(HttpMethod.Get,repos/aspnet/docs/pulls);var client _httpClientFactory.CreateClient(github);var response await client.SendAsync(request);var result await response.Content.ReadAsStringAsync();return result;
}重试机制services.AddHttpClient(github, c {c.BaseAddress new System.Uri(https://api.github.com/);c.DefaultRequestHeaders.Add(Accept, application/vnd.github.v3json);c.DefaultRequestHeaders.Add(User-Agent, HttpClientFactory-Sample);}).AddTransientHttpErrorPolicy(p p.WaitAndRetryAsync(3, _ TimeSpan.FromMilliseconds(600)));效果如下熔断降级超时设置降级策略当出现任何异常返回fallback设置熔断策略当连续出现异常异常 2 次熔断 4s设置超时策略请求超时为 1s超时默认会抛出 TimeoutRejectedException效果如下概要示例地址:https://github.com/fhcodegit/HttpClientFactoryPolly