最新要闻
- 今日热门!叶一茜当众骂森碟“心机”,她就这么恨女儿?
- 沙尘跨过长江一路向南!直击江皖沪多地沙尘现场
- 要闻:GT Neo5 SE 1TB版只卖2599 真我喊话:现货才是硬道理
- RTX 4070今晚发布 结果遭AMD背刺了:显存越大越好、4K至少16GB
- 全球头条:史上最挤”五一档来了!王一博《长空之王》等17部影片扎堆上映
- 网传明年中旬上海绿牌蓝牌要合并?官方回应来了
- 当前速读:梯田为“布” 光影为“沙” 点亮乡村“夜经济”
- 环球最资讯丨不怕有味儿 比毛巾划算:云南白药洗脸巾0.06元/张狂促
- 天天热点评!“回锅沙”要来了!部分地方要注意
- 全球短讯!果粉最期待的大屏MacBook Air来了!苹果史上第一款
- 世界视点!首款骁龙8+平板中兴Axon Pad来了:12.1寸超大屏
- 新动态:4月14日State of Play:将展示超20分钟《最终幻想16》
- 身体很诚实!马斯克加入AIGC大战:抢购1万张GPU、挖Deepmind墙角
- 当前视讯!曾被誉为最靠谱!又一家造车新势力发不出工资了
- 有病了还能买哪种保险?隐瞒健康告知带病投保会怎么样?
- 理想汽车全系车型电器真实功率再公开:空调果然是耗电大户!
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
热文:在.NET Core使用 HttpClient 的正确方式
前言
(相关资料图)
HttpClient 是 .NET Framework、.NET Core 或 .NET 5以上版本中的一个类,用于向 Web API 发送 HTTP 请求并接收响应。它提供了一些简单易用的方法,如 GET、POST、PUT 和 DELETE,可以很容易地构造和发送 HTTP 请求,并处理响应数据。它是我们比较常用的官方HTTP请求组件,那么你们都正确使用了吗?本文将探讨HttpClient的正确使用。
环境准备
首先我们用vs2022创建一个带默认 WeatherForcast 模板的 Web API 应用程序,以及一个普通的API的程序,项目使用的是.NET6。
项目结构如下
两个项目的功能点:
HttpClientTest - 返回天气预报的Web API
HttpClientTest2-这个项目将用HttpClient来请求HttpClientTest 的天气预备。
接下来我们用4种方法来说明HttpClient的正确使用方法。
方法1
我们首先在HttpClientTest2 创建HttpClientTestController类,并写一个请求天气预备的方法,代码如下:
namespace HttpClientTest2.Controllers{ [Route("api/[controller]")] [ApiController] public class HttpClientTestController : ControllerBase{ [HttpGet] public async Task TestHttpClient() {varurl="https://localhost:7281/WeatherForecast"; #region 版本1varhttpClient=newHttpClient();varresponse=awaithttpClient.GetAsync(url);returnawaitresponse.Content.ReadAsStringAsync();#endregion}}}
代码写完后,我们设置多项目启动,让这两个项目同时启动。
项目启动后,执行项目HttpClientTest2 的TestHttpClient请求接口。多执行几次。主要看看HttpClient后台的执行情况。这里可以用netstat来检查http的请求情况。
打开一个CMD控制台程序。输入如下代码:
netstat-na|find"7281"
7281端口是我们请求站点HttpClientTest。多次点击的效果如下:
由上面可以看出有多个请求,说明请求未关闭。接下来换第二种方法。
方法2
使用using命令来实现请求结束关闭请求,代码如下:
#region 版本2 using (var httpClient = new HttpClient()) { var response = await httpClient.GetAsync(url); return await response.Content.ReadAsStringAsync(); } #endregion //欢迎公众号:DOTNET开发跳槽
同样我们多次请求,结果如下:
在这里可以看到状态“TIME_WAIT”,说明链接已经关闭,但实际情况链接还是占用着端口,在资源耗尽才会释放。这就是套连接的问题,套接字耗尽是指服务器上的可用套接字资源已经全部被占用,无法为新的连接提供服务。在 TCP/IP 网络通信中,每个端口上最多只能建立一个连接,这就限制了服务器可以处理的连接数。当服务器负载过高时,就可能导致套接字资源紧张,进而引发套接字耗尽问题。针对上面问题,继续对HttpClient 改进。
方法3
这里我们使用单例模式试一试。代码如下:
public class HttpClientTestController : ControllerBase {privatestaticHttpClient_httpClient;staticHttpClientTestController(){_httpClient=newHttpClient();}//注意:有许多方法可以实现单例模式。在这里使用了静态实例方法。 [HttpGet] public async Task TestHttpClient() {varurl="https://localhost:7281/WeatherForecast"; #region 版本3 //var response = await _httpClient.GetAsync(url); //return await response.Content.ReadAsStringAsync();#endregion } }
代码编写完成后我们再试一试,结果如下:
因为使用了单例模式,没有创建新实例使用了相同的连接。这种方法解决了套接字耗尽问题。但是,我们注意到有一个状态为“已建立”的开放连接。如果有DNS更改或与网络相关的更改可能会影响连接,应用程序可能会失败,需要重新启动应用程序才能解决。这个方法也不是最理想的。
方法4
HttpClient是.NET内置方法,这里可以通过使用 IHttpClientFactory 接口来实现,从而避免上面的问题。代码如下:
public class HttpClientTestController : ControllerBase{ private readonly IHttpClientFactory _httpClientFactory; public HttpClientTestController(IHttpClientFactory httpClientFactory) { _httpClientFactory = httpClientFactory;} [HttpGet] public async Task TestHttpClient() {varurl="https://localhost:7281/WeatherForecast"; #region 版本4 var httpClient = _httpClientFactory.CreateClient(); var response = await httpClient.GetAsync(url); return await response.Content.ReadAsStringAsync();#endregion }//欢迎公众号:DOTNET开发跳槽
使用IHttpClientFactory 的话,需要在Program.cs 中注入,代码如下:
builder.Services.AddHttpClient();
同样多次请求,然后执行netstat命令。效果如下:
从请求的状态来看,通过使用 _httpClientFactory.CreateClient()完美解决问题。
结语
本文用四种方法渐进讲述了HttpClient的使用方法以及在使用过程中的问题,最终用IHttpClientFactory解决了出现的问题。希望本文对你有所收获,欢迎留言或者吐槽。
源码地址:https://github.com/xbhp/webapitest
参考:微软官方文档
来源公众号:DotNet开发跳槽
关键词:
-
热文:在.NET Core使用 HttpClient 的正确方式
前言HttpClient是 NETFramework、 NETCore或 NET5以上版本中的一个类,用于向WebAPI发送HTTP请求并接...
来源: -
JMeter-BeanShell预处理程序和BeanShell后置处理程序的应用
一、什么是BeanShell?BeanShell是用Java写成的,一个小型的、免费的、可以下载的、嵌入式的Java源代码解...
来源: 关于数智融合,看看这20位专家都聊了什么
热文:在.NET Core使用 HttpClient 的正确方式
看!前端新人如何用ChatGPT开发APP
JMeter-BeanShell预处理程序和BeanShell后置处理程序的应用
当前速读:智能指针基本原理,简单实现,常见问题
今日热门!叶一茜当众骂森碟“心机”,她就这么恨女儿?
【新华500】新华500指数(989001)12日窄幅震荡跌0.10%
沙尘跨过长江一路向南!直击江皖沪多地沙尘现场
要闻:GT Neo5 SE 1TB版只卖2599 真我喊话:现货才是硬道理
RTX 4070今晚发布 结果遭AMD背刺了:显存越大越好、4K至少16GB
全球头条:史上最挤”五一档来了!王一博《长空之王》等17部影片扎堆上映
网传明年中旬上海绿牌蓝牌要合并?官方回应来了
当前速读:梯田为“布” 光影为“沙” 点亮乡村“夜经济”
世界热消息:C#使用Elasticsearch入门
plist文件格式转换器
观速讯丨T-SQL基础教程Day1
天天微头条丨云图说|云数据库GaussDB如何做到卓越性能
环球最资讯丨不怕有味儿 比毛巾划算:云南白药洗脸巾0.06元/张狂促
天天热点评!“回锅沙”要来了!部分地方要注意
全球短讯!果粉最期待的大屏MacBook Air来了!苹果史上第一款
世界视点!首款骁龙8+平板中兴Axon Pad来了:12.1寸超大屏
新动态:4月14日State of Play:将展示超20分钟《最终幻想16》
全球看热讯:电商平台商品详情接口的应用场景
热点!二级指针创建二叉树节点与一级指针创建二叉树节点
身体很诚实!马斯克加入AIGC大战:抢购1万张GPU、挖Deepmind墙角
当前视讯!曾被誉为最靠谱!又一家造车新势力发不出工资了
全球微速讯:火山引擎 DataLeap 推出全链路智能监控报警平台
有病了还能买哪种保险?隐瞒健康告知带病投保会怎么样?
理想汽车全系车型电器真实功率再公开:空调果然是耗电大户!
小米13 Ultra样张首亮相:虚化堪比单反 夜拍效果惊人
《龙之家族》新季开拍
罕见超级激励!东方甄选奖励154员工8.83亿港元
【世界独家】00后网红骑摩托车遇车祸身亡 劝不住:网友感慨年轻 有必要全面禁摩?
易基因:METTL3介导的m6A甲基化谱调控肌肉干细胞成肌细胞状态转换|发育分化
全球快资讯丨中骏集团称已备好即将到期美元债兑付资金 拟发行第二支中债增全额担保中票
3月物价数据透露哪些经济变化?促消费政策获得较大空间
天天报道:iPhone 15 Pro颠覆式设计取消了!郭明錤:苹果因技术问题放弃固态按键
丫丫将通过温控卡车运至机场:即将飞赴上海
又有新品牌了!长安启源A07亮相:颜值超高碾压一众国产
报道:推特突然“死亡”!马斯克正式启动打造美版微信
走过别错过!红蜻蜓126款休闲鞋/运动鞋/皮鞋清仓:79元绝世好价
h3c路由器如何恢复出厂设置?h3c路由器配置命令大全
小米手机卡顿反应慢是什么原因?小米手机卡顿反应慢怎么解决?
ssd极速固态硬盘怎么样?ssd极速固态硬盘排名前十
iphone4的显示屏分辨率是多少?iphone4版本太低怎么下载软件?
AMD速龙QL64CPU性能怎么样?amd速龙系列cpu天梯图
Zabbix“专家坐诊”第187期问答汇总
每日报道:数据开发提效有秘诀!离线开发BatchWorks 六大典型场景拆解
全球观天下!公司入职一个阿里大佬,把 Spring Boot 系统启动时间从 7 分钟降到了 40 秒!
HTML中的pre-load 和 pre-fetch
全球最资讯丨京准GPS北斗卫星网络授时服务器助力高速智慧交通
环球观热点:三月三拜轩辕 | 全球华人同根同源——强月新
世界今亮点!雷军:小米13 Ultra将摆脱手机成片的“塑料味”
头条:淄博老板娘为赶高铁小伙1V1烤串!完美诠释“好客山东”
天天观察:苹果智能戒指专利首曝:VR场景交互只需动下手指
当前速读:1TB仅529元!致态TiPlus 7100固态硬盘新史低 选它还是选三星?
全球视讯!机构一致唱多金价 贵金属板块表现亮眼
世界热议:全网最详细中英文ChatGPT-GPT-4示例文档-场景问题智能生成从0到1快速入门——官网推荐的48种最佳应用场景(附python/node.js/
世界速讯:记一次kvm虚机mysql数据库磁盘扩容操作步骤及其问题小坑
每日视点!第八批国家组织药品集采中选结果公布
天天新资讯:公开叫停ChatGPT的马斯克暗渡陈仓玩得6 网友:他是懂中国兵法的
越野也不费油!坦克300 PHEV实车亮相:动力大增
实测RTX 4090平均20帧!《赛博朋克2077》成新一代“显卡危机”
每公里造价2.1亿!中国最贵高速公路预计2025年建成
全球观热点:被国产车打怕韩系车拼了 起亚新SUV赛图斯预售:仅9.19万元起
【独家】昆明部分店外增设“一米线”:商户可在线内摆摊
环球今日报丨中国国债期货收益指数今日发布
今日精选:比五菱MINI EV还便宜?奇瑞“棒棒糖”亮相:油门到底时速能到100km
重点聚焦!小米成中国市场周销量安卓第一!高端旗舰小米13 Ultra本月发布
焦点速讯:你达标了吗?国内人均存款增加1.2万:人民币存款继续增长
天天视点!初代跑男重聚引热议:邓超李晨王宝强等合照引回忆杀
32岁婆孙恋爆红网络!日本61岁奶奶交往29岁男子 网友感叹相貌绝了
新动态:让你脑洞大开的MySQL优化技巧
多地超前谋划专项债项目 “早发快用”加力稳投资
微速讯:女生在冬季剪什么发型好看呢?
天天热头条丨行业首款卫星通信5G手机!中兴Axon 50 Ultra吴京代言图公布:背部外观揭晓
【独家】韩国4月前10天芯片出口下降近40%:1TB SSD三星降599没人买 国产崛起
环球热点评!中老铁路国际旅客列车明日开通:万象到昆明南二等座470元
全球信息:大疆8K航拍无人机明天发 悟3真机亮相:个头感受下
天天观察:97版三兄弟代言!《天龙八部2:飞龙战天》4月14日公测:完美世界发行
每日看点!女子没开会员追剧需看50多分钟广告:遇到了BUG是个例
环球热议:酒也分贵贱? 专家:洋酒就没文化含量 中国酒文化才叫源远流
世界微动态丨图赫尔:0比3输球的结果很苦涩,但今天我爱上了我的球队
环球观点:CSS杂谈——flex布局里面的auto到底多长
光栅化算法-中点画圆算法
Win无敌二十多年后 微软又抓到了AI风口:印度裔CEO立大功
环球关注:“小号Mate 50 Pro”!华为畅享60X来了:骁龙680、又一技术行业首发
全球观点:这株极品牡丹居然有“带刀侍卫”!24小时守护
当前关注:地表能效第一!锐龙9 7950X3D深入测试:i9-13900K无言以对
焦点讯息:SSD散热器疯了:比显卡都要高!还有暴力风扇
最新快讯!2023年北京市积分落户申报时间安排一览表
世界资讯:微信小程序:接手项目,修bug
焦点简讯:选择大城市逐梦还是小城市安稳
世界快消息!电动自行车电池爆炸由谁赔偿?律师:销售商也有责任
每日热闻!会“跳舞”的汽车你见过吗?比亚迪云辇系统再次引领行业
全球热议:韩国26岁女星被发现在家中去世:新剧拍摄中 死因未透露
Python中struct 模块的使用教程
焦点观察:once do, do it well
全球资讯:华为小米vivo一加重磅新机汇总!接下来10天有的看了
世界球精选!终于不缺货了!小米13 Ultra订单增加50%:不愁买不到