【发布时间】: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”位。我想要一个包装器,因为我在那里做的事情很少
-
你目前拥有的是正确的
标签: c# asp.net-core asp.net-core-webapi dotnet-httpclient httpclientfactory