作者:宝贝娜娜121_562 | 来源:互联网 | 2022-11-02 15:31
我正在创建一个API,充当应用程序和其他2个API之间的桥梁。我想知道最好的方法是什么。我正在使用HttpClient。该应用程序有近一千个用户。
我阅读了这篇文章https://aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/。我真的不应该使用using语句吗?我也在做同步api调用。这有什么作用吗?我做的效率高吗?
这是我的代码:
[HttpGet]
[Route("api/apiname")]
public String GetNumberofP([FromUri]GetNumberofPRequest getNPRequest){
var request = JsonConvert.SerializeObject(getNPRequest);
string errorMessage = "";
try{
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.gettoken());
var respOnse= httpClient.GetAsync("api/MobileApp/GetNumberP?"
+ "strCardNumber=" + getNPRequest.strCardNumber
+ "&strDateOfBirth=" + getNPRequest.strDateOfBirth).Result;
return response;
}
catch (Exception e){
throw utils.ReturnException("GetNumberofP", e, errorMessage);
}
}
Nicholas..
8
HttpClient
不需要处理,您应该保留它以便以后重用。
可以使用的一件事(从链接的线程中):
您只需要提供HttpClient
工厂并配置方法,LimitedPool
其余的
就可以了:
_httpClientPool = new LimitedPool(
CreateHttpClient, client => client.Dispose(), HttpClientLifetime);
using (var httpClientCOntainer= _httpClientPool.Get())
{ ... use httpClientContainer.Value ... }
当httpClientContainer
被处置时,HttpClient
实际上将其返回到池中以供其他线程使用。当达到使用寿命时,处置将最终调用该Dispose
方法。
在这里查看代码
.Net Core的替代
按照本文档中的描述实施它。
该IHttpClientFactory
可以通过调用注册AddHttpClient
的扩展方法IServiceCollection
,里面的Startup.ConfigureServices
方法。
services.AddHttpClient();
一旦注册,代码就可以接受IHttpClientFactory
可以通过依赖项注入(DI)注入的任何地方的服务。该IHttpClientFactory
可用于创建一个HttpClient
实例:
public MyConstructor(IHttpClientFactory clientFactory)
{
_clientFactory = clientFactory;
}
public async Task OnGet()
{
....
var client = _clientFactory.CreateClient();
var respOnse= await client.SendAsync(request);
...
}
无需使用using()
。
1> Nicholas..:
HttpClient
不需要处理,您应该保留它以便以后重用。
可以使用的一件事(从链接的线程中):
您只需要提供HttpClient
工厂并配置方法,LimitedPool
其余的
就可以了:
_httpClientPool = new LimitedPool(
CreateHttpClient, client => client.Dispose(), HttpClientLifetime);
using (var httpClientCOntainer= _httpClientPool.Get())
{ ... use httpClientContainer.Value ... }
当httpClientContainer
被处置时,HttpClient
实际上将其返回到池中以供其他线程使用。当达到使用寿命时,处置将最终调用该Dispose
方法。
在这里查看代码
.Net Core的替代
按照本文档中的描述实施它。
该IHttpClientFactory
可以通过调用注册AddHttpClient
的扩展方法IServiceCollection
,里面的Startup.ConfigureServices
方法。
services.AddHttpClient();
一旦注册,代码就可以接受IHttpClientFactory
可以通过依赖项注入(DI)注入的任何地方的服务。该IHttpClientFactory
可用于创建一个HttpClient
实例:
public MyConstructor(IHttpClientFactory clientFactory)
{
_clientFactory = clientFactory;
}
public async Task OnGet()
{
....
var client = _clientFactory.CreateClient();
var respOnse= await client.SendAsync(request);
...
}
无需使用using()
。
__仅.Net Core的替代方法__此声明肯定是错误的。您应该已经阅读了链接的文档,该文档指出:面向.NET Framework的_Projects需要安装Microsoft.Extensions.Http NuGet软件包。面向.NET Core并引用Microsoft.AspNetCore.App元包的项目已经包含Microsoft.Extensions.Http package_