.Net Core Console 项目如何使用 HttpClient 与 Web 服务通信

image

前言

HttpClient 类是在 .NET Framework 4.5 和 .NET Core 中引入的新的 HTTP 客户端类,是 .NET 用于发送和接收 HTTP 请求的类,相比之前的 WebRequestHttpWebRequest, 它提供了现代的、易用的 API,并且具有更好的性能和扩展性,使得在 .NET 应用程序中与 Web 服务进行通信变得更加方便。

通过 HttpClient,可以发送 GET、POST、PUT、DELETE 等类型的 HTTP 请求到指定的 Web Api,可以设置请求头、请求体、超时时间等参数,接收 Web 服务返回的 HTTP 响应,包括响应头、响应体等信息,并且 HttpClient 支持在异步环境中高效地发送和接收 HTTP 请求。

.Net Core 使用 HttpClient 的方法跟 .NET Framework 大同小异,如果您希望了解 .Net Core 是如何使用 HttpClient 的, 那么本文能给你一个很好的帮助。

Step By Step 步骤

  1. 创建一个 ASP.NET Core Console 项目

  2. 从 Nuget 安装以下包

    Microsoft.Extensions.DependencyInjection

  3. 打开 Program.cs,引入依赖注入命名空间,依赖注入 HttpClient(留意注释

    using Microsoft.Extensions.DependencyInjection;
    
    ServiceCollection services = new ServiceCollection();
    
    // 依赖注入 HttpClient
    services.AddHttpClient();
    
    // 依赖注入 NetUtil 类 
    services.AddScoped<NetUtil>();
    
    // 调用 NetUtil 类的 Test 方法
    using (var sp = services.BuildServiceProvider())
    {
    	using (var scope = sp.CreateScope())
    	{
    		var spScope = scope.ServiceProvider;
    		var demo = spScope.GetRequiredService<NetUtil>();
    		await demo.Test();
    	}
    }
    
  4. 新建 NetUtil 类,依赖注入 IHttpClientFactory 使用 HttpClient(留意注释

    using Microsoft.Extensions.Logging;
    using Microsoft.Extensions.Options;
    using System.Text;
    
    class NetUtil
    {
    	// 声明IHttpClientFactory
    	private readonly IHttpClientFactory clientFactory;
    
    	// 构造方法注入 IHttpClientFactory
    	public NetUtil(IHttpClientFactory clientFactory)
    	{
    		this.clientFactory = clientFactory;
    	}
    
    	public async Task Test()
    	{
    		// 事先准备的一个 Web Api
    		var url = "http://127.0.0.1:54327/net/mytest";
    		var intervalTime = optIntervalSettings.Value;
    		await GetEquip(url);
    	}
    
    	private async Task GetApiContent(UrlSettings url)
    	{
    		var client = clientFactory.CreateClient();
    
    		// 配置 Request 请求头
    		client.MaxResponseContentBufferSize = 2560000;
    		client.DefaultRequestHeaders.Add("Accept", "*/*");
    		client.DefaultRequestHeaders.Add("Accept-Encoding", "gzip, deflate");
    		client.DefaultRequestHeaders.Add("Accept-Language", "zh-CN,zh;q=0.9");
    		client.DefaultRequestHeaders.Add("Connection", "keep-alive");
    		client.DefaultRequestHeaders.Add("user-agent", "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36");
    
    		// 异步发送 Get 请求
    		var res = await client.GetAsync(url);
    		
    		// 确保 HTTP 请求成功,提高程序的可靠性
    		res.EnsureSuccessStatusCode();
    		
    		// 异步读取响应消息
    		var body = await res.Content.ReadAsStringAsync();
    
    		Console.WriteLine(body);
    	}
    }
    
  5. 至此,一个简单的请求程序就完成了,可以运行并在 Postman 中进行测试

结语

总的来说,.NET Core HttpClient 是一个功能强大且易用的与 Web Api 通信的类,而且可以通过自定义 DelegatingHandlerHttpMessageHandler 扩展功能和自定义处理,是推荐的发送 HTTP 请求的类。

在使用时,应该尽量复用 HttpClient 实例,因为在短时间内频繁创建和销毁 HttpClient 实例可能会导致资源泄漏和性能问题,合理配置和处理 HTTP 请求和响应,以达到更好的性能和可靠性。

您觉得 HttpClient 怎么样呢?欢迎留言讨论。

我是老杨,一个奋斗在一线的资深研发老鸟,让我们一起聊聊技术,聊聊人生。

都看到这了,求个点赞、关注、在看三连呗,感谢支持。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/676742.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Spring Cloud】微服务链路跟踪Sleuth

目录 为什么要使用微服务链路跟踪微服务的现状多服务协同工作复杂的调用链条容易出错 微服务链路跟踪需要实现的需求实现监控决策避免技术债务快速定位故障 微服务链路跟踪的技术要求低消耗应用透明延展性可控采样率可视化 Spring Cloud Sleuth简介Spring Cloud Sleuth的4个特点…

‘yarn’不是内部或外部命令,也不是可运行的程序或批处理文件。

目录 问题点 解决方式 # 安装 # 版本 # 本地发生变化&#xff08;了解&#xff09; # 安装项目依赖 新问题 解决方式 问题点 在vscode中&#xff0c;点击dev运行&#xff0c;项目报错【Q1】 * 正在执行任务: yarn run dev yarn : 无法将“yarn”项识别为 cmdlet、函数…

代码随想录算法训练营第26天(py)| 回溯 | 39. 组合总和、40.组合总和II、131.分割回文串

39. 组合总和 力扣链接 给定一个无重复元素的数组 candidates 和一个目标数 target &#xff0c;找出 candidates 中所有可以使数字和为 target 的组合。 candidates 中的数字可以无限制重复被选取。 说明&#xff1a; 所有数字&#xff08;包括 target&#xff09;都是正整数…

利用MaxKB+Ollama:搭建智能问答系统_Ubuntu部署maxkb

Docker方式&#xff0c;不建议使用 即使maxKB和ollama在同一目录下&#xff0c;API域名也显示无效。 Ollama下载网址&#xff1a;Download Ollama on Linux Linux下载&#xff1a;curl -fsSL https://ollama.com/install.sh | sh The Ollama API is now available at 127.0.…

PE文件结构详解之头信息解析

PE文件结构详解 一、前言1.概述2.PE文件结构3.所用工具 二、DOS头&#xff08;DOS Header&#xff09;解析1.作用2.图例3.参数详解4.总结 三、DOS Stub1.作用2.图例 四、NT头&#xff08;NT Header&#xff09;解析1.作用2.PE标识图例3.文件头&#xff08;COFF头&#xff09;图…

TinyMCE 富文本编辑器:打造个性化编辑体验

本文由ScriptEcho平台提供技术支持 项目地址&#xff1a;传送门 TinyMCE 富文本编辑器&#xff1a;打造个性化编辑体验 应用场景介绍 TinyMCE 是一款功能强大的富文本编辑器&#xff0c;广泛应用于网站内容管理、博客创作、在线文档编辑等场景。它提供了一系列丰富的编辑功…

LightDB pro*c迁移指南(游标模块)

文章目录 一、不使用SQLDA描述符范围的游标操作1.1 oracle 案例1.1.1 使用游标获取数据1.1.2 对于fetch结果集怎么去利用 1.2 LightDB 案例1.2.1 使用游标获取数据1.2.2 对于fetch结果集怎么去利用 3 总结&#xff1a;不同项 二、使用SQLDA描述符范围的游标操作2.1 Oracle样例2…

基于java的CRM客户关系管理系统(五)

目录 第五章 系统的详细设计与实现 5.1 持久层设计 5.1.1 创建关系映射 5.1.2 与数据库的连接 5.1.3 Hibernate的ORM映射 5.1.4 Struts的配置文件 5.1.5 Spring 的配置文件 5.1.6 DAO层设计 5.2 逻辑业务层设计 5.2.1 业务逻辑类的实现 前面内容请移步 基于java的C…

Jmeter干货分享:当你的Log viewer不显示日志时,可能是引入的Jar包冲突导致

问题描述 近期使用Jmeter时发现了一个非常奇怪的问题&#xff0c;就是Jmeter是可以正常使用运行脚本&#xff0c;但是在Log viewer中确没有任何日志&#xff0c;如下图&#xff1a; 问题排查过程 真是百思不得其解啊&#xff0c;在网上各种获取资料&#xff0c;大多数都是说跟…

001----flask

flask---001 flask与django对比今日概要问答今日详细1.flask快速使用1.2 快速使用flask1.3 用户名密码登录 flask与django对比 django是个大而全的框架&#xff0c;flask是一个轻量级的框架。 django内部为我们提供了非常多的组件&#xff1a;orm/session/cookie/admin/from/mo…

【学习】企业如何选择一个合适的DCMM咨询机构

DCMM是我国首个数据管理领域正式发布的国家标准。旨在帮助企业利用先进的数据管理理念和方法&#xff0c;建立和评价自身数据管理能力&#xff0c;持续完善数据管理组织、程序和制度&#xff0c;充分发挥数据在促进企业向信息化、数字化、智能化发展方面的价值。该标准借鉴了国…

Python学习从0开始——Kaggle机器学习003总结

Python学习从0开始——Kaggle机器学习003总结 一、加载及浏览数据二、机器学习模型三、模型验证四、欠拟合和过拟合五、随机森林 一、加载及浏览数据 # 路径 melbourne_file_path ../input/melbourne-housing-snapshot/melb_data.csv # 读取 melbourne_data pd.read_csv(mel…

为什么大家都要考CDA数据分析师认证

为什么学习数据分析&#xff1f; 2024年&#xff0c;是一个被数据影响的时代。数据&#xff0c;如同无形的燃料&#xff0c;驱动着现代社会的运转。从全球互联网的用户每天产生的2.5亿TB数据&#xff0c;到制造业的传感器、金融交易、医疗病历等领域的海量信息&#xff0c;数据…

排序算法——归并排序以及非递归实现

一、归并排序思想 归并排序&#xff08;MERGE-SORT&#xff09;是建立在归并操作上的一种有效的排序算法,该算法是采用分治法&#xff08;Divide andConquer&#xff09;的一个非常典型的应用。将已有序的子序列合并&#xff0c;得到完全有序的序列&#xff1b;即先使每个子序列…

使用Python绘制瀑布图

使用Python绘制瀑布图 瀑布图效果代码 瀑布图 瀑布图&#xff08;Waterfall Chart&#xff09;是一种数据可视化工具&#xff0c;用于展示累积数值的变化&#xff0c;尤其适合于展示随时间或过程中的增减变化。它通常用于财务分析&#xff0c;如展示收入、支出和净利润的变化过…

分离式光电液位传感器与浮球开关相比具有哪些优势

分离式光电液位传感器与浮球开关相比有哪些优势&#xff1f;分离式光电液位传感器依据光学原理&#xff0c;在传统光学传感器的基础上进行了改进。其特点是将光学组件分离出来&#xff0c;置于水箱外部感应&#xff0c;而传感器本身则独立于水箱外。这种设计有效解决了浮球开关…

CPU内部结构窥探·「1」

CPU内部逻辑运算单元是如何运行的 引言 中央处理器&#xff08;CPU&#xff09;是计算机的大脑&#xff0c;负责处理各种计算任务。在CPU里面&#xff0c;有一个重要的部分叫做逻辑运算单元&#xff08;ALU&#xff0c;Arithmetic Logic Unit&#xff09;。ALU就像一个超级计…

JS面试题:hash和history的区别

一、hash 模式和 history 模式的介绍 由于 Vue 项目为单页面应用&#xff0c;所以整个项目在开发和构建过程中&#xff0c;仅存在一个HTML物理文件。通过路由系统可以实现将项目的组件与可访问的URL路径进行绑定。由于Vue项目只有一个HTML物理文件&#xff0c;切换页面时既需要…

vivado BD_INTF_NET、BD_INTF_PIN

BD_INTF_NET 描述 接口是一组信号&#xff0c;它们共享一个共同的功能&#xff0c;同时包含 单个信号和多条总线。例如&#xff0c;AXI4Lite主机包含一个 单个信号的数量加上多条总线&#xff0c;这些都是制作 联系通过将这些信号和总线分组到一个接口中&#xff0c;Vivado IP积…

VisualStudio中:如果某个项目不显示SVN的show log等,而其他项目都正常

VisualStudio中&#xff1a;如果某个项目不显示SVN的show log等&#xff0c;而其他项目都正常。说明大概率是当前项目的问题&#xff0c;而不是VisualStudio的问题&#xff01; 1.这个项目内有一个“隐藏”文件夹.svn 》先删除&#xff01; 2.如果外层文件夹有红色感叹号&…