我正在尝试在.net core 3.0中尽可能有效地使用http客户端,但是似乎仍在每个服务中使用客户端,例如,我有以下StockSevices类,该类将容纳我所有与股票I有关的调用目前正在使用asp.net core 3.0
public class StockServices
{
public HttpClient Client { get; }
public StockServices(HttpClient client)
{
client.BaseAddress = new Uri(Constants.BaseApiUrl);
// GitHub API versioning
// GitHub requires a user-agent
client.DefaultRequestHeaders.Add("User-Agent",
"HttpClientFactory-Sample");
Client = client;
}
public async Task<IEnumerable<RoundTableERPDal.Models.Stock>> GetAspNetDocsIssues()
{
var response = await Client.GetAsync(
"/Stock/All");
response.EnsureSuccessStatusCode();
var result = await response.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<IEnumerable<RoundTableERPDal.Models.Stock>>(result);
}
我已将其放置在启动文件中,但我没有得到的是如何传递全局HTTP客户端,因为我们打算使用相同的HTTP客户端来阻止对许多打开的端口的调用降级。
在我的启动cs。
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.Configure<ConnectionStringConfig>(Configuration);
services.AddHttpClient("externalservice", c =>
{
// Assume this is an "external" service which requires an API KEY
c.BaseAddress = new Uri("https://localhost:5001/");
});
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "Api For RoundTable A Complete ERP for warehouse managment", Version = "v1" });
});
}
答案 0 :(得分:0)
当您需要的是 Typed 客户端
时,您已经添加了 Named 客户端。//...
services.AddHttpClient<StockServices>(client => {
// Assume this is an "external" service which requires an API KEY
client.BaseAddress = new Uri(Constants.BaseApiUrl);
// GitHub API versioning
// GitHub requires a user-agent
client.DefaultRequestHeaders.Add("User-Agent", "HttpClientFactory-Sample");
});
//...
如果StockServices
最终被抽象,则可以对其接口进行同样的操作
services.AddHttpClient<IStockServices, StockServices>(client => {
// Assume this is an "external" service which requires an API KEY
client.BaseAddress = new Uri(Constants.BaseApiUrl);
// GitHub API versioning
// GitHub requires a user-agent
client.DefaultRequestHeaders.Add("User-Agent", "HttpClientFactory-Sample");
});
服务的外观
public class StockServices: IStockServices {
private readonly HttpClient client;
public StockServices(HttpClient client) {
this.client = client;
}
public async Task<IEnumerable<RoundTableERPDal.Models.Stock>> GetAspNetDocsIssues() {
using(var response = await client.GetAsync("/Stock/All")) {
response.EnsureSuccessStatusCode();
var result = await response.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<IEnumerable<RoundTableERPDal.Models.Stock>>(result);
}
}
}