c# - Authentication per request using HttpClientFactory .net Core 2.1
问题描述
How should I use HttpClientFactory to return an instance of HttpClient whose uri and credentials are determined at the point of the call?
The existing code looks like this:
var httpClientHandler = new HttpClientHandler()
{
Credentials = new NetworkCredential(userName, password),
};
HttpClient client = new HttpClient(httpClientHandler);
client.BaseAddress = new Uri(_appSetting.ServiceURI);
解决方案
启动类中的 ConfigureServices 方法
services.AddHttpClient("github", c =>
{
//c.BaseAddress = new Uri("https://api.github.com/");
c.DefaultRequestHeaders.Add("Accept", "application/vnd.github.v3+json");
c.DefaultRequestHeaders.Add("User-Agent", "HttpClientFactory-Sample");
}).ConfigurePrimaryHttpMessageHandler(() =>
{
return new HttpClientHandler()
{
UseDefaultCredentials = true,
Credentials = new NetworkCredential("", ""),
};
});
您的控制器将如下所示
private readonly IHttpClientFactory _httpClientFactory;
public DataProController(IHttpClientFactory httpClientFactory)
{
_httpClientFactory = httpClientFactory;
}
[HttpGet]
public async Task<ActionResult> Get()
{
var client = _httpClientFactory.CreateClient("github");
client.BaseAddress = new Uri("https://api.github.com/");
string result = await client.GetStringAsync("/");
return Ok(result);
}
使用 httpclientfactory 时,您可能无法在运行时设置网络凭据,可能需要在启动类中设置。您可以在此处找到有关此问题的信息。 https://github.com/aspnet/HttpClientFactory/issues/71
推荐阅读
- mysql - 插入选择语句
- javascript - 错误类型错误:无法在 Angular 6 中读取 null 的属性“推送”
- java - 在 Android 上禁用 Firebase 离线功能
- javascript - create-react-app eslint error "Parsing error: 'import' and 'export' may appear only with 'sourceType: module'"
- vba - Replacement works only once
- javascript - how to sort an array of string which contains special characters and white spaces
- java - 下载 APK 无法在 Chrome 浏览器中运行
- java - 检查某个日期是否比android中的时间戳年轻n年?
- javascript - Node.JS AJAX 空体
- php - 未定义的变量,虽然它在 php 中作为类文件列表存在