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

devtools/2024/9/19 0:52:39/ 标签: .netcore, c#, HttpClient, 前后端通信

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留意注释

    c#">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留意注释

    c#">using Microsoft.Extensions.Logging;
    using Microsoft.Extensions.Options;
    using System.Text;class NetUtil
    {// 声明IHttpClientFactoryprivate readonly IHttpClientFactory clientFactory;// 构造方法注入 IHttpClientFactorypublic NetUtil(IHttpClientFactory clientFactory){this.clientFactory = clientFactory;}public async Task Test(){// 事先准备的一个 Web Apivar 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 怎么样呢?欢迎留言讨论。

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

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


http://www.ppmy.cn/devtools/46206.html

相关文章

堆排序pta

UML&#xff08;Unified Modeling Language&#xff09;类图是面向对象设计&#xff08;OOD&#xff09;中常用的一种图表&#xff0c;用于描述系统中的类、接口、以及它们之间的关系。下面是一个简单的步骤&#xff0c;指导你如何绘制UML类图&#xff1a; 确定类和接口&#…

独立游戏开发的 6 个步骤

&#x1f482; 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】&#x1f91f; 一站式轻松构建小程序、Web网站、移动应用&#xff1a;&#x1f449;注册地址&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交…

基于epoll实现reactor模型

基于epoll实现reactormox 流程&#xff1a; 创建socket文件描述符sockfdsetsockopt设置端口复用bind绑定地址listen监听端口创建epoll树epoll_create(1)将sockfd上epoll树,同时通过epoll_event.data.ptr绑定监听处理函数等信息内核监听 代码&#xff1a; #include<string…

Java面试进阶指南:高级问题与解答精粹(一)

Java面试问题及答案 1. 什么是Java内存模型&#xff08;JMM&#xff09;&#xff1f;它的作用是什么&#xff1f; 答案&#xff1a; Java内存模型&#xff08;JMM&#xff09;是一个抽象的概念&#xff0c;它定义了Java程序中各种变量&#xff08;线程共享变量&#xff09;的…

3D轻量化的三大应用解决方案

老子云平台https://www.laozicloud.com/ 为不同应用场景提供了三大解决方案。 01 单模型轻量化解决方案 数字化时代&#xff0c;越来越多的C2M定制、文旅、电商等行业&#xff0c;为了开拓市场&#xff0c;提升企业竞争力&#xff0c;开始把目光投向产品的3D展示交互。 单模…

JVM监控-JMX探针的安装和使用

jvm监控的搭建和使用 ​ Java Management Extensions&#xff08;JMX&#xff09;是一种Java标准&#xff0c;用于管理和监控Java应用程序&#xff0c;特别是分布式系统。它提供了一种标准化的方式来管理应用程序的各种方面&#xff0c;包括性能监控、配置更改、事件通知等。目…

6年IT找工作想法

由于我学历比较低&#xff0c;当时没好好学&#xff0c;后面参加了大数据培训&#xff0c;现在也已经有6年了。 我是计算机专业的&#xff0c;我的培训同学有些不是计算机的&#xff0c;但是是本科&#xff0c;双非一本的这种&#xff0c;在6年后和我的差距不是一点点了&#x…

图论(五)-最短路

一、Bellman-Ford算法 算法思想&#xff1a;通过 n 次循环&#xff0c;每次循环都遍历每条边&#xff08;共 m 条边&#xff09;&#xff0c;进而更新节点的距离&#xff0c;每次循环至少可以确定一个点的最短路&#xff0c;循环 n 次&#xff0c;求出 n 个点的最短路 时间复杂…

计算机图形学入门05:投影变换

1.投影变换 上一章已经介绍了投影变换&#xff0c;就是将三维图像投影到二维平面上&#xff0c;而投影变换又分为正交投影(Orthographic Projection)和透视投影(Perspective Projection)。如下图&#xff1a; 正交投影 没有近大远小的现象&#xff0c;无论图形与视点距离是远是…

分享毕业论文要怎么写以及写论文工具推荐

毕业论文的写作是一个系统且需要深度研究的过程。以下将分步介绍毕业论文的写作方法&#xff0c;并推荐一些实用的写作工具。 毕业论文写作方法 选题&#xff1a; 确定研究方向和目标&#xff0c;选择具体且有一定研究价值的课题。建议选择应用型题目&#xff0c;结合理论和实…

java配置文件解析yml/xml/properties文件

XML 以mybatis.xml:获取所有Environment中的数据库并连接session为例 import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException;import javax.xml.parsers.DocumentBuilder; impo…

SpringBoot案例,通关版

项目目录 此项目为了伙伴们可以快速入手SpringBoot项目,全网最详细的版本,每个伙伴都可以学会,这个项目每一步都会带大家做,学完后可以保证熟悉SpringBoot的开发流程项目介绍:项目使用springboot mybatis进行开发带你一起写小项目先把初始环境给你们第一步新建springboot项目返…

创建模拟器

修改模拟器默认路径 由于模拟器文件比较大&#xff0c;默认路径在C:\Users\用户名.android\avd&#xff0c;可修改默认路径 创建修改后的路径文件 D:\A-software\Android\AVD添加系统变量ANDROID_SDK_HOME&#xff1a;D:\A-software\Android\AVD重启Android Studio 创建模拟…

制造企业如何通过PLM系统实现BOM管理的飞跃

摘要 在当今快速变化的制造行业中&#xff0c;产品生命周期管理&#xff08;PLM&#xff09;系统的应用已成为企业提升效率、降低成本和增强竞争力的关键。本文将探讨PLM系统如何通过其先进的BOM&#xff08;物料清单&#xff09;管理功能&#xff0c;帮助制造企业在整个产品生…

双向带头链表实现

目录 一. 逻辑结构图解 1. 节点中存储的值 2.逻辑实现 二. 各种功能实现 1. 创建节点函数 2. 初始化哨兵位 3. 尾插 4. 头插 5. 尾删 6. 头删 7. 打印链表值 8. 查找数据&#xff0c;返回节点地址 9. 指定地址后插入节点 10. 删除指定地址节点 11. 销毁链表 三.…

数据库 mysql 的彻底卸载

MySQL卸载步骤如下&#xff1a; &#xff08;1&#xff09;按 winr 快捷键&#xff0c;在弹出的窗口输入 services.msc&#xff0c;打开服务列表。 &#xff08;2&#xff09;在服务列表中&#xff0c; 找到 mysql 开头的所有服务&#xff0c; 右键停止&#xff0c;终止对应的…

前端科举八股文-VUE篇

前端科举八股文-VUE篇 Vue响应式的基本原理?computed和watch的区别computed和methods的区别Slot是什么 ? 作用域插槽是什么?组件缓冲keep-alive是什么&#xff1f; 讲讲原理v-if&#xff0c;v-show的区别v-modal如何实现双向绑定组件中的data属性为什么是一个函数而不是对象…

【机器学习】探索未来科技的前沿:人工智能、机器学习与大模型

文章目录 引言一、人工智能&#xff1a;从概念到现实1.1 人工智能的定义1.2 人工智能的发展历史1.3 人工智能的分类1.4 人工智能的应用 二、机器学习&#xff1a;人工智能的核心技术2.1 机器学习的定义2.2 机器学习的分类2.3 机器学习的实现原理2.4 机器学习的应用2.5 机器学习…

【AIGC半月报】AIGC大模型启元:2024.06(上)

AIGC大模型启元&#xff1a;2024.06&#xff08;上&#xff09; (1) ChatTTS&#xff08;语音合成项目&#xff09; (1) ChatTTS&#xff08;语音合成项目&#xff09; 2024.06.01 ChatTTS 文本转语音项目爆火出圈&#xff0c;引来大家极大的关注。短短三天时间&#xff0c;在…

吉林大学计科21级《软件工程》期末考试真题

文章目录 21级期末考试题一、单选题&#xff08;2分一个&#xff0c;十个题&#xff0c;一共20分&#xff09;二、问答题&#xff08;5分一个&#xff0c;六个题&#xff0c;一共30分&#xff09;三、分析题&#xff08;一个10分&#xff0c;一共2个&#xff0c;共20分&#xf…