【发布时间】:2020-08-10 04:40:03
【问题描述】:
我想调用一个第三方 API,它为我们提供了两个不同的授权令牌值。因此,我们通过调用相同的端点 URL 得到了两组不同的结果。
EndpointUrl: https://mail.yahoo.com/
Authorization: Token User123
//Do something with the response for User123
Authorization: Token User345
//Do something with the response for User345
在我的客户端服务中,我的包装函数应该通过使用不同的令牌值调用它两次来调用此 API。获取结果并合并。
这是我的服务。
public class MailService : IMailService
{
private readonly HttpClient _httpClient;
public MailService(HttpClient httpClient)
{
_httpClient = httpClient;
}
public async Task<UserResponse> GetUserResponse()
{
var uri = new Uri(_httpClient.BaseAddress.AbsoluteUri + "/user-data/");
var response = await _httpClient.GetAsync(uri);
return response;
}
}
我使用的是Typed Client:
services.AddHttpClient<IMailService,MailService>(client =>
{
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Token", "User123");
client.BaseAddress = new Uri("https://mail.yahoo.com/");
})
问题陈述:
检索结果的最佳方法是什么?我不确定是否应该创建两个单独的HttpClient 实例?如果我使用两个包含它们自己的 HttpClient 的不同类,我想避免重复代码。
也许我的解决方案在Named Client 的某个地方。我只是不知道如何优雅地实现它。
任何帮助将不胜感激。
【问题讨论】:
-
我已经发布了几个 cmets 然后删除,因为这是一种奇怪的做法
IHttpClientFactory以前从未见过它。我刚刚打开 VS 2019 启动了一个新的 .NETCore 3.1 WebAPI,但我无法让它运行。将HttpClient注入到服务中使我的代码非常适合。这对你来说很好吗?你从构造函数中获得了 IMailService 中的 HttpClient? -
@Andy 完全有效,查找“Typed HttpClient”
-
很奇怪。无法让它按照你的方式工作。我早上不那么累的时候试试。
标签: c# asp.net-core httpclient