c# - 将 httpHandler 附加到 httpclientFactory webapi aspnetcore 2.1
问题描述
我正在尝试使用“ConfigurePrimaryHttpMessageHandler”将处理程序附加到 httpclientfactory
但是当我查看 HttpClient 内部以查看处理程序是否存在时,我找不到它
我是否正确连接了处理程序?
任何建议
services.AddHttpClient<IGitHubClient,GitHubClient>(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<string> GetData();
}
public class GitHubClient : IGitHubClient
{
private readonly HttpClient _client;
public GitHubClient(HttpClient httpClient)
{
_client = httpClient;
}
public async Task<string> GetData()
{
return await _client.GetStringAsync("/");
}
}
public class ValuesController : Controller
{
private readonly IGitHubClient _gitHubClient;;
public ValuesController(IGitHubClient gitHubClient)
{
_gitHubClient = gitHubClient;
}
[HttpGet]
public async Task<ActionResult> Get()
{
//my _gitHubClient has no Handler attached!!!
string result = await _gitHubClient.GetData();
return Ok(result);
}
}
解决方案
您显示的代码是推荐的方法。
关于评论_gitHubClient
//我的 _gitHubClient 没有附加处理程序!!!
好像是个误会。
_gitHubClient
是您在其实现中包装HttpClient
实例的抽象。GitHubClient
public class GitHubClient : IGitHubClient {
private readonly HttpClient _client; //<< Handler will be attached to this instance
public GitHubClient(HttpClient httpClient) {
_client = httpClient;
}
public async Task<string> GetData() {
return await _client.GetStringAsync("/");
}
}
正是那个包装的实例将具有附加的处理程序。
根据当前配置,每当框架必须创建IGitHubClient
派生GitHubClient
的注入实例时,工厂将HttpClient
使用启动时提供的设置创建一个。其中还包括添加HttpClientHandler
由ConfigurePrimaryHttpMessageHandler
推荐阅读
- mysql - Docker MySQL 容器 ERROR 1030 (HY000): Got error 168 - 'Unknown (generic) error from engine' 来自存储引擎
- python - chess.engine 在同一个脚本中多次分析一个位置时,为什么会有不同的分数?
- java - 如何在我的路径中显示从上到下的泄漏
- css - 如何将内联 CSS 添加到 Laravel if 语句?
- python - 将 Pinescript 翻译成 Python - Python 的系列下标是什么?
- python - 如何按照特定模式替换单词中的歧义字符
- sql - 使用位域和附加表命名位列
- git - 通过开发使功能分支保持最新 - 变基问题
- node.js - MBF - 呼叫选项未显示在团队中
- r - 在“R”中带有“venneuler”的维恩图:从图中删除集合的名称并添加元素名称