首页 > 编程语言 >C# HttpClient 基本使用方式(一)

C# HttpClient 基本使用方式(一)

时间:2023-11-21 18:00:11浏览次数:41  
标签:方式 C# 对象 client new using HttpClient

.NetCore主要提供了HttpWebRequest,WebClient,HttpClient这三种访问web的方式,其中HttpWebRequest,WebClient都在官方被标注为已过时,如果没有特殊需求,一般情况下还是使用官方推荐的HttpClient方式。
image

HttpClient 的基本使用方法

使用HttpClient发送请求一般是如下几步:
1.创建HttpClient对象
2.配置HttpClient对象的属性,如Header,请求方式等
3.执行请求获取访问对象的HttpResponse
4.处理得到的HttpResponse

            using (HttpClient client = new HttpClient()) 
            {
                HttpResponseMessage responseMessage = await client.GetAsync(url);
                responseMessage.EnsureSuccessStatusCode();//确认接口返回StatusCode,如果不是200则返回异常
                string result = responseMessage.Content.ReadAsStringAsync().Result;
            }

如果需要配置Header,可以在执行client之前添加

                    client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
                    client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", Convert.ToBase64String(Encoding.UTF8.GetBytes(" account:password")));

但是根据最近的官方文档,using方式存在一定不确定性,多次请求的并发的时候用using不是很好的方式

using 语句中声明和实例化它并非首选操作,因为释放 HttpClient 对象时,基础套接字不会立即释放,这可能会导致套接字耗尽问题,最终可能会导致 SocketException 错误。要解决此问题,推荐的方法是将 HttpClient 对象创建为单一对象或静态对象
HttpClient 旨在实例化一次,并在应用程序的整个生命周期内重复使用

所以建议在开始就创建静态对象HttpClient 然后再使用

       private static HttpClient Client = new HttpClient();
        ··········
       Client.Dispose();

通过新建静态对象的方式的可以让电脑的资源占用情况得到明显的改善,但是该情况并不适用于设置不同请求头的情况,这时候可以使用IHttpClientFactory来实现
IHttpClientFactory是在 .NET Core 2.1 中引入的,使用服务可能需要 IHttpClientFactory 作为带有 DI 的构造函数参数。

标签:方式,C#,对象,client,new,using,HttpClient
From: https://www.cnblogs.com/LearnerPing/p/17846905.html

相关文章

  • LeetCode-Java:88合并两个有序数组
    题目:给你两个按非递减顺序排列的整数数组nums1和nums2,另有两个整数m和n,分别表示nums1和nums2中的元素数目。请你合并nums2到nums1中,使合并后的数组同样按非递减顺序排列。注意:最终,合并后数组不应由函数返回,而是存储在数组nums1中。为了应对这种情况,nums1......
  • No installations recognized 以及 nvm use切换node版本无效的解决办法
    NodeJS版本管理工具——NVM:https://blog.csdn.net/weixin_44767973/article/details/131591333  前端开发node.js、vue安装环境【安装node版本管理工具-nvm,耗时一天时间踩坑总结】: https://blog.csdn.net/weixin_48337566/article/details/127003773 Noinstallationsr......
  • @ComponentScan和@MapperScan的作用
    本文根据文章:https://blog.csdn.net/weixin_45693551/article/details/132302689进行修改@ComponentScan@ComponentScan("com.xa")注解用于指定Spring容器在启动时需要扫描的包路径。在这个例子中,Spring容器会扫描com.xa包及其子包下的所有类,将带有@Component、@Service、@Re......
  • macOS安装安卓模拟器和apk包
    背景公司项目有个POS收银系统,是安卓版的,提供的是apk包,而办公电脑是mac,需要安装使用 解决方法安装安卓模拟器模拟器下载地址:https://www.aliyundrive.com/s/NZet5jrKxV4下载完成后,将.mp4后缀改为.dmg。然后如下图方式安装。  遇到问题解决办法Couldnotautomati......
  • DPO Matching
    题意给定一张大小为\(2n\)的图,求该图二分图匹配的方案数。\(n\le21\)。Sol状压板题。设\(f_T\)表示\(T\)集合内的点被匹配。直接转移即可。Code#include<iostream>#include<algorithm>#include<cstdio>#include<array>usingnamespacestd;#ifdefONLINE......
  • [ABC328D] Take ABC 题解
    链接如果只是扫一遍肯定是不行的,所以我们使用一个栈,遇到C就判断栈顶的两个元素是不是分别为B和A。这样就能做出来这道题了。代码#include<bits/stdc++.h>usingnamespacestd;strings;charstk[200010];intmain(){ cin>>s; intn=s.size(),p=0;//字符串长度和......
  • js实现自动滚动以及分页数据请求,解决不同手机scrollTop++兼容问题
    创作不易,主要是为了分享,希望能帮到碰到类似问题的朋友,有帮助的话就给点个赞吧。 需求:公司需要实现一份合同的自动滚动预览,以及分页请求下一页数据继续滚动,直到所有合同加载完成就取消滚动。问题:不同手机使用scrollTop++,会出现+1出现小数点,整数的情况,导致请求下一页的数据无法......
  • 硬盘录像机无法注册到视频监控平台EasyCVR上是什么原因?该如何解决?
    视频监控汇聚平台EasyCVR可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安防视频监控的能力,也具备接入AI智能分析的能力,包括对人、车、物、行为等事......
  • 等保测评之主机测评——Centos7
    目录基础信息收集(一)身份鉴别(二)访问控制(三)安全审计(四)入侵防范(五)恶意代码防范(六)可信验证(七)数据完整性(八)数据保密性(九)数据备份恢复(十)剩余信息保护命令合集在测评过程中最为常见的是三级系统,所以本文按照三级等保标准进行测评。本文中出现的测评截图均为博主搭建的测试环境。......
  • 计算机科学与技术之网络编程 Windows下VC6.0 网络SOCKET编程C语言实现(服务端)
    在VC6.0平台用C语言实现网络SOCKET通信一.在VC6.0平台创建Win32ConsoleApplication工程工程名称自拟(或输入firstSocket)添加新建项文件C++SourceFile 文件名自拟,后缀.c(如firstSocket.c)在firstSocket.c加入头文件#include<winsock2.h>链接动态库#pragmacomment(l......