项目里使用httpclient一般加staic或者单例来防止每次请求都会新建立一个连接,从而占用太多的服务器资源,

问题产生


但是今天新加的一个方法中每次需要请求不同的url,这时候就出现了错误:

就是说该连接已经由其他请求占着了,必须等前面的请求完成了,才能修改属性(baseurl),what? 每次都new肯定也不行呀,这要咋整!!

一番百度,发现在.net core 2.1的时候引入了httpclientfactory, 它会维护一个连接池并自动判断何时复用何时新建连接,比较好的解决了这个问题,

使用方法如下:

1.startup中注册:


publicvoid ConfigureServices(IServiceCollection services)

{
services.AddHttpClient();
services.AddMvc();
}

2.controller中调用


public class MyController : Controller
{
IHttpClientFactory _httpClientFactory; public MyController(IHttpClientFactory httpClientFactory)
{
_httpClientFactory = httpClientFactory;
} public IActionResult Index()
{
var client = _httpClientFactory.CreateClient();
var result = client.GetStringAsync("http://myurl/");
return View();
}
}

IHttpClientFactory的实现类DefaultHttpClientFactory是internal访问权限,意味着你不能直接通过new的方式生成所需的HttpClientFactory。

所以你只能通过AddHttpClient方法在ASP.NET Core的DI容器中注册IHttpClientFactory。然后再想办法获取已注册接口的实例。
有一种方式是借助WebHost类的Services属性,它的IServiceProvider类型的值具有GetService方法,可以获取实例。
另一种方式是借助HttpContext的RequestServices属性,一样可以获取实例。

参考:

https://www.cnblogs.com/kenwoo/p/9333042.html

https://www.jianshu.com/p/732aee097c6b?from=timeline

https://www.cnblogs.com/dudu/p/http-client-factory.html

.net core中使用HttpClient碰到的问题:This instance has already started one or more requests. Properties can only be modified before sending the first request的更多相关文章

  1. ASP.NET Core教程:在ASP.NET Core中使用HttPClient调用WebService

    一.前言 在以前的一篇文章中,曾经讲述过如何在ASP.NET Core中调用WebService.但是那种方式是通过静态引用的方式去调用的,如果是在生产环境中,肯定不能使用这种方式去调用,幸运的是微软 ...

  2. .net core 中使用httpclient,HttpClientFactory的问题

    Microsoft 在.Net Framework 4.5中引入了HttpClient,并且是在.NET服务器端代码中使用Web API的最常用方法.但它有一些严重的问题,如释放HttpClient对 ...

  3. asp.net core中使用HttpClient实现Post和Get的同步异步方法

     准备工作 1.visual studio 2015 update3开发环境 2.net core 1.0.1 及以上版本  目录 1.HttpGet方法 2.HttpPost方法 3.使用示例 4. ...

  4. 在.Net Core中使用HttpClient添加证书

    最近公司要对接电信物联网北向API接口,当调用Auth授权接口时,需要用到证书,此篇文章记录下遇到的坑~ 有两种调用接口的方式,下面是两种方式的简单示例 1.使用HttpClient public s ...

  5. Asp.Net Core中HttpClient的使用方式

    在.Net Core应用开发中,调用第三方接口也是常有的事情,HttpClient使用人数.使用频率算是最高的一种了,在.Net Core中,HttpClient的使用方式随着版本的升级也发生了一些变 ...

  6. HttpClient在.NET Core中的正确打开方式

    问题来源 长期以来,.NET开发者都通过下面的方式发送http请求: using (var httpClient = new HttpClient()) { var response = await ...

  7. ASP.NET Core中如何针对一个使用HttpClient对象的类编写单元测试

    原文地址: How to unit test a class that consumes an HttpClient with IHttpClientFactory in ASP.NET Core? ...

  8. 工厂参观记:.NET Core 中 HttpClientFactory 如何解决 HttpClient 臭名昭著的问题

    在 .NET Framework 与 .NET Core 中 HttpClient 有个臭名昭著的问题,HttpClient 实现了 IDispose 接口,但当你 Dispose 它时,它不会立即关 ...

  9. 你的眼睛背叛你的心:解决 .NET Core 中 GetHostAddressesAsync 引起的 EnyimMemcached 死锁问题

    在我们将站点从 ASP.NET + Windows 迁移至 ASP.NET Core + Linux 的过程中,目前遇到的最大障碍就是 —— 没有可用的支持 .NET Core 的 memcached ...

  10. .net core中使用GB2312编码的问题

    最近在用.net core写一个爬虫抓取网页上的数据,碰到了网页编码是GBK的页面,抓取的数据都是乱码,当使用Encoding.GetEncoding("GBK")的时候抛出了异常 ...

随机推荐

  1. stream-分组两次

    Map<String, Map<String, List<AmazonBalanceCustom>>> amazonBalanceMap = amazonBalan ...

  2. OCR开源项目

    转发自https://www.toutiao.com/a6802032805313249806/?tt_from=weixin&utm_campaign=client_share&wx ...

  3. QPushButton CSS样式

    QPushButton:!hover { color:white; font: 20pt "楷体"; border-radius:10px; border:1px solid rg ...

  4. C#使用SharpZipLib解压多文件的zip压缩文件数据流,保存到本地

    代码: public async Task<ReturnModel<List<string>>> UploadModel() { var task = new Ta ...

  5. getinstance方法(转)

    getinstance方法 https://www.cnblogs.com/roadone/p/7977544.html //实例化 public static DBConnect instance; ...

  6. bzoj 2337

    有人说这题像游走... 关于游走的思想,他死了... 明明直接从期望dp的角度考虑更简单合理嘛 首先由于是异或运算不妨逐位考虑 对于每一位,设状态$f[i]$表示从第$i$个点到第$n$个点,这一位上 ...

  7. find_in_set使用:匹配按逗号分隔后的内容

    SELECT  * FROM `tb_test` WHERE c_id ='123' AND create_time LIKE '2021-06-03%'  AND find_in_set('A362 ...

  8. UEC++学习(2)

    第三章 断言 第一节 简单的断言 断言让程序的进程中断,方便程序员发现在哪里发生了问题. AGameBase * GameBase = nullptr; check(false); check(Gam ...

  9. 安装pytorch时install的packages

  10. k8s集群查看node和pod的实时资源使用情况

    一.部署步骤 1.准备metrics-server官方yaml文件 2.部署metrics-server 3.查看资源使用情况 二.准备metrics-server官方yaml文件 [root@loc ...