.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
    {// 声明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.mzph.cn/bicheng/21449.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024 cicsn magicvm

文章目录 参考检查逆向vm::runvm::vmvm_alu::set_inputvm_mem::set_inputvm_id::runvm_alu::runvm_mem::run 漏洞思路参考的exp 参考 https://forum.butian.net/share/3048 https://akaieurus.github.io/2024/05/20/2024%E5%9B%BD%E8%B5%9B%E5%88%9D%E8%B5%9Bpwn-wp/#SuperHea…

9个轻量化的效率神器,保证你100%用得上

给你推荐9个轻量化的效率神器&#xff0c;保证你100%用得上。 首先介绍uTools的3个效率技巧 快速启动 想要快速打开一个应用&#xff0c;不用去一堆的应用图标里面去寻找&#xff0c;直接按下快捷键&#xff0c;输入应用的名称或首字母&#xff0c;便可以找到应用&#xff0…

GNeRF论文理解

文章目录 主要解决什么问题&#xff1f;结构设计以及为什么有效果&#xff1f;个人想法。 主要解决什么问题&#xff1f; 本文主要想要解决的问题是 如何使用uncalibrated的照片来进行Nerf重建。虽然说现在已经有了一些方式可以对相机位姿进行估计和优化&#xff0c;但是他们限…

journal日志管理

1、systemd-journald详解 systemd-journald日志默认保存在/run/log/journal中&#xff0c;重启会被清楚&#xff0c;如果存在/var/log/journal目录&#xff0c;systemd-journald日志会自动改为记入在这个目录中&#xff0c;同时日志轮转也会启动&#xff0c;日志轮状每月启动&…

如何通过网站封装App工具轻松创建移动应用

想象一下&#xff1a;将您的网站变成App 大多数网站管理员和开发人员多多少少都曾梦想过将自己的网站变成一款移动应用。传统的App开发过程不仅繁琐&#xff0c;还需要耗费大量的时间和资源。好消息是&#xff0c;现在有了网站封装App工具&#xff0c;这一切都变得简单了。您只…

HashMap 随记

HashMap 构造器 HashMap 共有四个构造器&#xff1a; public HashMap(int initialCapacity, float loadFactor) {// 对于传入的初始容量&#xff08;loadFactor&#xff09; 及 负载因子&#xff08;loadFactor&#xff09;的一些边界判断if (initialCapacity < 0) throw n…

Android Audio基础——音频配置xml文件加载(七)

通过前面的文章&#xff0c;我们知道在 AudioPolicyManager 初始化的时候回调用 loadConfig() 方法去加载 Audio 相关的配置信息&#xff0c;这里我们就来详细看一下。 一、配置文件加载 1、AudioPolicyManager 源码位置&#xff1a;/frameworks/av/services/audiopolicy/ma…

将下拉弹层渲染节点固定在触发器的父元素中

将下拉弹层渲染节点固定在触发器的父元素中 注意: 如果发现下拉菜单跟随页面滚动&#xff0c;或者需要在其他弹层中触发 Select&#xff0c; 请尝试使用 getPopupContainer{triggerNode > triggerNode.parentElement} 将下拉弹层渲染节点固定在触发器的父元素中。

【MySQL】探索 MySQL 的 GROUP_CONCAT 函数

缘分让我们相遇乱世以外 命运却要我们危难中相爱 也许未来遥远在光年之外 我愿守候未知里为你等待 我没想到为了你我能疯狂到 山崩海啸没有你根本不想逃 我的大脑为了你已经疯狂到 脉搏心跳没有你根本不重要 &#x1f3b5; 邓紫棋《光年之外》 什么是 GRO…

遗传算法与应用分析

遗传算法的概念 简单来说&#xff0c;遗传算法&#xff08;Genetic Algorithm&#xff0c;GA&#xff09;是一种模拟自然进化过程的优化算法。它通过模拟生物进化的遗传机制&#xff0c;通过选择、交叉和变异等操作&#xff0c;逐代优化搜索空间中的解。遗传算法最初由约翰霍兰…

【面试题-001】什么是面向对象?

文章目录 什么是面向对象&#xff1f;与面向过程的区别&#xff1f;哪些语言是面向对象 哪些是面向过程&#xff1f; 什么是面向对象&#xff1f; 面向对象&#xff08;Object-oriented&#xff09;是一种程序设计范例&#xff0c;它通过将数据与对数据操作的函数&#xff08;…

V90 PN伺服驱动器附加报文750详细使用介绍(算法分析)

1、V90PN伺服驱动器转矩控制(750报文) V90 PN伺服驱动器转矩控制(750报文)_v90pn转矩控制-CSDN博客文章浏览阅读3.4k次,点赞2次,收藏3次。主要介绍通过标准报文加附加报文 750 实现发送驱动报文的控制字、速度给定、转矩限幅及附加转矩给定的功能,首先就是V90在博途环境下…

算法学习笔记——对数器

对数器 对数器的实现&#xff1a; 你想要测的方法a&#xff08;最优解&#xff09;实现复杂度不好但是容易实现的方法b&#xff08;暴力解&#xff09;实现一个随机样本产生器&#xff08;长度也随机、值也随机&#xff09;把方法a和方法b跑相同的输入样本&#xff0c;看看得…

分享5款.NET开源免费的Redis客户端组件库

前言 今天大姚给大家分享5款.NET开源、免费的Redis客户端组件库&#xff0c;希望可以帮助到有需要的同学。 StackExchange.Redis StackExchange.Redis是一个基于.NET的高性能Redis客户端&#xff0c;提供了完整的Redis数据库功能支持&#xff0c;并且具有多节点支持、异步编…

总结2024/6/3

省流&#xff0c;蓝桥杯国优&#xff0c;还是太菜了&#xff0c;听说都是板子题但是还是写不出来&#xff0c;靠暴力好歹没有爆0&#xff0c;还是得多练&#xff0c;明年加油了

JWT 签名用对称加密还是非对称加密?

一 概念梳理 对称加密和非对称加密是两种基本的加密方法&#xff0c;它们在现代密码学中扮演着核心角色&#xff0c;用于保护数据的安全和隐私。 1.1 对称加密&#xff08;Symmetric Encryption&#xff09; 对称加密是指加密和解密使用同一个密钥的过程。这意味着发送方和接…

!力扣 108. 将有序数组转换为二叉搜索树

给你一个整数数组 nums &#xff0c;其中元素已经按升序排列&#xff0c;请你将其转换为一棵 平衡二叉搜索树。 示例 1&#xff1a; 输入&#xff1a;nums [-10,-3,0,5,9] 输出&#xff1a;[0,-3,9,-10,null,5] 解释&#xff1a;[0,-10,5,null,-3,null,9] 也将被视为正确答案…

封装了一个使用UICollectionViewLayout 实现的吸附居左banner图

首先查看效果图 实现的原理就是通过自定义UICollectionView layout&#xff0c;然后 设置减速速率是快速就可以达到吸附的效果 _collectionView.decelerationRate UIScrollViewDecelerationRateFast; 下面贴出所有代码 这里是.h // // LBMiddleExpandLayout.h // Liubo…

文章解读与仿真程序复现思路——电力系统自动化EI\CSCD\北大核心《具有源荷不平衡特性的配电网智能软开关和储能联合规划》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

CTF_RE学习

学了一个 map&#xff08;&#xff09;函数的使用 import base64rawData "e3nifIH9b_CndH" target list(map(ord, rawData)) # map 函数将 rawData 中的每个字符传递给 ord 函数。ord 函数返回给定字符的 Unicode 码点 print(target) # 打印 map 对象的内存地址&…