将 httpHandler 附加到 httpclientFactory webapi aspnetcore 2.1
Posted
技术标签:
【中文标题】将 httpHandler 附加到 httpclientFactory webapi aspnetcore 2.1【英文标题】:Attaching httpHandler to httpclientFactory webapi aspnetcore 2.1 【发布时间】:2018-06-26 13:45:11 【问题描述】:我正在尝试使用“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
是包装 HttpClient
实例的抽象。拥有处理程序的正是该实例。
是的,正确。是否可以有一个围绕 httpclient 的包装器并将处理程序附加到它。如果是这样,我应该如何更改“addHttpClient”位。我想要一个包装器,因为我在那里做的事情很少
你目前拥有的是正确的
【参考方案1】:
您显示的代码是推荐的方法。
关于_gitHubClient
的评论
//我的_gitHubClient没有附加Handler!!!
似乎是个误会。
_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
。其中还包括添加ConfigurePrimaryHttpMessageHandler
提供的HttpClientHandler
【讨论】:
感谢您的回复和时间。实际上你是对的,处理程序一直在那里,但在内部-内部-等等.. 但是在我的测试中,在查看 Request.Connection = Microsoft.AspNetCore.Http.Internal.DefaultConnectionInfo 时调用这个其他 api 我找不到处理程序。它在请求中位于哪里以上是关于将 httpHandler 附加到 httpclientFactory webapi aspnetcore 2.1的主要内容,如果未能解决你的问题,请参考以下文章
将 jquery json 传递到 asp.net httphandler
有啥方法可以在.NET 中以编程方式添加 HttpHandler?