将httpHandler附加到httpclientFactory webapi aspnetcore 2.1
我试图使用“ConfigurePrimaryHttpMessageHandler”将处理程序附加到httpclientfactory
但当我查看HttpClient内部以查看处理程序是否存在时,我无法找到它
我是否正确附加了处理程序?
任何建议
services.AddHttpClient(client => { client.BaseAddress = new Uri(myUri); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); }) .ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler { AllowAutoRedirect = false, AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip }); public interface IGitHubClient { Task GetData(); } public class GitHubClient : IGitHubClient { private readonly HttpClient _client; public GitHubClient(HttpClient httpClient) { _client = httpClient; } public async Task GetData() { return await _client.GetStringAsync("/"); } } public class ValuesController : Controller { private readonly IGitHubClient _gitHubClient;; public ValuesController(IGitHubClient gitHubClient) { _gitHubClient = gitHubClient; } [HttpGet] public async Task Get() { //my _gitHubClient has no Handler attached!!! string result = await _gitHubClient.GetData(); return Ok(result); } }
您展示的代码是推荐的方法。
关于_gitHubClient
的评论
//我的_gitHubClient没有附加Handler !!!
似乎是一种误解。
_gitHubClient
是在其GitHubClient
实现中包装HttpClient
实例的抽象。
public class GitHubClient : IGitHubClient { private readonly HttpClient _client; //<< Handler will be attached to this instance public GitHubClient(HttpClient httpClient) { _client = httpClient; } public async Task GetData() { return await _client.GetStringAsync("/"); } }
这是包装的实例,它将具有附加的处理程序。
根据当前配置,每当框架必须创建IGitHubClient
派生的GitHubClient
实例以进行注入时,工厂将使用启动时提供的设置创建HttpClient
。 其中还包括添加ConfigurePrimaryHttpMessageHandler
提供的HttpClientHandler
- 在ASP.NET MVC Core项目中使用View内部的C#7function
- ASP.NET MVC 6:在单独的程序集中查看组件
- 引用ASP.NET Core中的现有.NET Framework项目
- 使用.NET Core的Firebase身份validation(JWT)
- 如何在ASP.NET MVC 6中继续使用ModelState和RedirectToAction?
- ASP.NET Core错误:实施忘记密码时出现无效令牌错误
- 在ASP.NET Core Identity UI中更改路由?
- ASP.NET Core Routing适用于VS IIS Express,但不适用于IIS 10
- 虽然存在依赖关系和使用,但找不到类型或命名空间名称“Ping”