.Net HttpClient 使用请求数据

HttpClient 使用请求数据

0、初始化及全局设置

//初始化:必须先执行一次
#!import ./ini.ipynb

1、使用url 传参

参数放在Url里,形如:http://www.baidu.com?name=zhangsan&age=18, GET、Head请求用的比较多。优点是简单、方便,能被浏览器缓存;缺点是参数长度等限制较多,数据暴露url中,可能比较长。

/**URL传参:适合简单数据类型
*/
{//获取响应字符串{var response = await SharedClient.GetAsync("api/Normal/GetAccount?id=1");response.EnsureSuccessStatusCode();var content = await response.Content.ReadAsStringAsync();Console.WriteLine(content);}//获取响应对象{var response = await SharedClient.GetAsync("api/Normal/GetAccount?id=1");response.EnsureSuccessStatusCode();var result = await response.Content.ReadFromJsonAsync<BaseResult<Account>>();result.Display();}//直接获取响应对象{var result = await SharedClient.GetFromJsonAsync<BaseResult<Account>>("api/Normal/GetAccount?id=1");result.Display();}}

2、使用路由传参

路由参数,指参数使为URL的一部分,一般由后端API设定好,前端按规定使用即可。例如:后端指定/user/:id,前端使用/user/1,此时id为路由参数。

/*
** 路由参数:参数是URL的一部分,由后端指定
*/
{//大括号:方便折叠、开成单独的作用域var response = await SharedClient.GetAsync("api/Normal/GetAccount/管理员01");//确定是成功的响应response.EnsureSuccessStatusCode();//获取响应内容var content = await response.Content.ReadAsStringAsync();//输出 Console.WriteLine(content);
}

3、使用请求头

把请求数据放入请求头中,传给后端。当然也可以传多个数据。不过,请求头中传数据限制比较多,一般只传简单的数据:比如jwt token 。

/*
* 请求头: 值必须是字符串,如果有中文等需进行编码
*/
{//设置请求头//中文先编码,服务端接收后要解码var codedName = System.Net.WebUtility.UrlEncode("管理员01");//SharedClient是共用的,所以不能多次添加,先移除旧值if (SharedClient.DefaultRequestHeaders.Contains("name")){SharedClient.DefaultRequestHeaders.Remove("name");}//添加请求头SharedClient.DefaultRequestHeaders.Add("name", codedName);var response = await SharedClient.GetAsync("api/Normal/GetAccountFromHeader");//确定是成功的响应response.EnsureSuccessStatusCode();//获取响应内容var content = await response.Content.ReadAsStringAsync();//输出 Console.WriteLine(content);
}

4、使用请求体

把数据放在请求体中,发送到服务端。可以是简单的字符串,也可以是二进制数据(上传文件)、form表单项、编码过的form表单项、json、流式数据等形式,甚至是这个类型的组合。

说下个人的几点理解:
1、不管哪种请求体数据,都是放在请求体中,以二进制形式通过网络发往服务器,由服务器接收使用。客户端发送请求数据需要与服务端接收相配合;
2、客户端通过Content-Typey请求头设置,告诉服务端请求发送的是哪种类型的数据;服务端根据Content-Type来识别、解析请求数据。常见的类型有:multipart/form-data、application/x-www-form-urlencoded、application/json、text/plain等;
3、ASP.NET Core中,默认的请求体类型是FormUrlEncodedContent,所以默认情况下,客户端发送的请求数据是form表单项; asp.net 框架对json格式数据和表单数据进行了特殊处理,支持参数绑定等,可以使用[FromBody]特性,将请求数据绑定到对应的模型上。但普通的文本类型等不支持绑定等功能,需要从请求体中获取原始数据,自行处理。
4、一次可发送多种格式数据,由统一的分隔符分隔。服务端可以从请求头[] Content-Type: multipart/mixed; boundary=“d2e38916-df08-4fec-a40e-3e5179736f32”]拿到分隔符,然后根据分隔符将数据拆分出来。

HttpClient 中,请求体也分为这几种(常见的)类型:

  1. MultipartFormDataContent
  2. FormUrlEncodedContent
  3. JsonContent
  4. StringContent
  5. ByteArrayContent
  6. StreamContent
  7. MultipartContent

MultipartFormDataContent :Form表单

Form表单,提交数据方式之一。

/*
*   Form表单,提交数据。一般为Put或Post提交。
*/
{// 创建一个 MultipartFormDataContent 对象, 用来存入 Form表单 各项及值var formContent = new MultipartFormDataContent();// 添加表单字段formContent.Add(new StringContent("1"), "id");formContent.Add(new StringContent("管理员01"), "name");// 发送POST请求var response = await SharedClient.PostAsync("api/AdvancedGet/PostFormData", formContent);// 读取响应内容string responseString = await response.Content.ReadAsStringAsync();Console.WriteLine(responseString);
}

FormUrlEncodedContent :Form表单 asp.net core 默认接收方式

/*FormUrlEncoded 提交数据 
*/
{//设置数据项var urlEncodedData = new List<KeyValuePair<string,string>>(){new KeyValuePair<string,string>(key:"id",value:"1"),new KeyValuePair<string,string>(key:"name",value:"管理员01"),};//FormUrlEncodedContent对象var formContent = new FormUrlEncodedContent(urlEncodedData);// 发送POST请求var response = await SharedClient.PostAsync("api/AdvancedGet/PostFormData", formContent);// 读取响应内容string responseString = await response.Content.ReadAsStringAsync();Console.WriteLine(responseString);
}

StringContent 普通文本(也包括很多格式,甚至是自定义格式。要和服务器配合)

/*普通文本方式提交数据
*/
{var requestContent = new StringContent("我是请求体第一段内容", Encoding.UTF8, "text/plain");var response = await SharedClient.PostAsync("/api/AdvancedPost/TextData", requestContent);var content = await response.Content.ReadAsStringAsync();Console.WriteLine(content);
}

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

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

相关文章

Qt还有希望吗

&#x1f680;2025 年 Qt 框架价值大揭秘&#xff01;会持续闪耀吗&#xff1f; 宝子们&#xff0c;今天来聊聊 Qt 框架在 2025 年的价值走向&#xff0c;这可是跨平台应用开发的宝藏工具呀&#xff01; &#x1f31f;核心优势稳稳拿捏Qt 的跨平台能力绝了&#xff01; Windows…

Redis设计与实现——数据结构与对象

简单动态字符串&#xff08;SDS&#xff09; SDS 的结构定义 len&#xff1a;记录当前字符串的实际长度&#xff08;不包含 \0&#xff09;&#xff0c;获取长度的时间复杂度为 O(1)。free&#xff1a;记录未使用的空间大小&#xff0c;用于优化内存分配。buf[]&#xff1a;实…

NeurIPS 2025 截稿攻略

会议资讯 NeurIPS&#xff0c;全称神经信息处理系统大会&#xff0c;是一个关于机器学习和计算神经科学的国际会议。NeurIPS是CCF&#xff08;计算机学会&#xff09;推荐的A类会议&#xff01;是机器学习领域内最具难度、水平最高且影响力最强的会议之一。它与ICML&#xff0…

Java中堆栈

文章目录 Java中堆栈1. 栈&#xff08;Stack&#xff09;特点示例 2. 堆&#xff08;Heap&#xff09;特点示例 3. 核心区别4. 常见问题5. 内存可视化示例内存布局示意图&#xff1a; 总结 Java中堆栈 在 Java 中&#xff0c;“堆栈” 通常指的是堆&#xff08;Heap&#xff0…

【类拷贝文件的运用】

常用示例 当我们面临将文本文件分成最大大小块的时&#xff0c;我们可能会尝试编写如下代码: public class TestSplit {private static final long maxFileSizeBytes 10 * 1024 * 1024; // 默认10MBpublic void split(Path inputFile, Path outputDir) throws IOException {…

打破产品思维--被讨厌的勇气--实战5

课程&#xff1a;B站大学 记录产品经理实战项目系统性学习&#xff0c;从产品思维&#xff0c;用户画像&#xff0c;用户体验&#xff0c;增长数据驱动等不同方向理解产品&#xff0c;从0到1去理解产品从需求到落地的全过程&#xff0c;测试左移方向&#xff08;靠近需求、设计…

【Autosar SecOC 1.信息安全原理介绍】

这里写目录标题 1 背景2 了解黑客攻击原理3 SecOC实现数据的真实性与完整性校验3.1 数据身份验证完成真实性验证3.2 防止重放攻击 1 背景 在今天的车载网络中&#xff0c;大部分数据传输是在没有任何特殊安全措施的情况下进行的。因此&#xff0c;一旦能够直接访问车辆的总线&a…

基于SpringBoot的校园周边美食探索及分享平台【附源码+数据库+文档下载】

一、项目简介 本项目是一个基于 SpringBoot Vue 的校园周边美食探索与分享平台&#xff0c;专为在校大学生开发&#xff0c;集美食推荐、好友互动、收藏分享于一体。 通过平台&#xff0c;用户可以探索学校周边的美食店铺、发布美食鉴赏、添加好友进行交流分享。同时&#x…

无偿帮写毕业论文

以下教程教你如何利用相关网站和AI免费帮你写一个毕业论文。毕竟毕业论文只要过就行&#xff0c;脱产学习这么多年&#xff0c;终于熬出头了&#xff0c;完成毕设后有空就去多看看亲人好友&#xff0c;祝好&#xff01; 一、找一个论文模板(最好是overleaf) 废话不多说&#…

15 个 Azure DevOps 场景化面试问题及解答

问题 1. 解释 Azure DevOps YAML 管道的典型结构。 您可以从管道的整体结构开始&#xff0c;从触发器开始。您也可以选择解释它可能包含的不同类型的阶段&#xff1a;构建、测试、扫描、部署等。 Azure DevOps YAML 管道结构示例 触发器指示管道运行。它可以是持续集成 (CI) 或…

Java 大视界 -- Java 大数据机器学习模型在元宇宙虚拟场景智能交互中的关键技术(239)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…

本地不安装oracle,还想连oracle

1.首先要用navicat,或者toad打开连接数据库 2.安装oracle客户端&#xff0c;有时候OCI.dll需要看数据库版本&#xff0c;我们Oracle数据库是12C&#xff0c;可以用这个版本 3. 4.配置环境变量 变量名&#xff1a;NLS_LANG变量值&#xff1a;SIMPLIFIED CHINESE_CHINA.ZHS16GBK …

LabVIEW车牌自动识别系统

在智能交通快速发展的时代&#xff0c;车牌自动识别系统成为提升交通管理效率的关键技术。本案例详细介绍了基于 LabVIEW 平台&#xff0c;搭配大恒品牌相机构建的车牌自动识别系统&#xff0c;该系统在多个场景中发挥着重要作用&#xff0c;为交通管理提供了高效、精准的解决方…

deque底层数据结构以及和queue的异同

文章目录 底层数据结构原理关键组成部分操作效率与其他容器的对比适用场景C STL中的实现细节总结 deque和queue的异同相同点不同点 deque&#xff08;双端队列&#xff09;是一种具有高效两端插入和删除操作的数据结构&#xff0c;常见于C标准库&#xff08;STL&#xff09;和其…

WordPress 网站上的 jpg、png 和 WebP 图片插件

核心功能 1. 转换 AVIF 并压缩 AVIF 将您 WordPress 网站上的 jpg、png 和 WebP 图片转换为 AVIF 格式&#xff0c;并根据您设置的压缩级别压缩 AVIF 图片。如果原始图片已经是 WordPress 6.5 以上支持的 AVIF 格式&#xff0c;则原始 AVIF 图片将仅被压缩。 2. 转换 WebP 并…

Docker Volumes

Docker Volumes 是 Docker 提供的一种机制&#xff0c;用于持久化存储容器数据。与容器的生命周期不同&#xff0c;Volumes 可以独立存在&#xff0c;即使容器被删除&#xff0c;数据仍然保留。以下是关于 Docker Volumes 的详细说明&#xff1a; 1. 为什么需要 Volumes&#…

西电 | 2025年拟录取研究生个人档案录取通知书邮寄通知

各位考生&#xff1a; 我校2025年硕士研究生录取工作已结束&#xff0c;根据相关工作管理规定&#xff0c;现将个人档案转调及录取通知书邮寄信息确认等有关事宜通知如下&#xff1a; 一、个人档案转调 &#xff08;邮寄档案请务必使用EMS&#xff09; 1.全日制考生 录取类…

ExcelJS库的使用

ExcelJS 安装 npm install exceljs新的功能! Merged fix: styles rendering in case when “numFmt” is present in conditional formatting rules (resolves #1814) #1815. Many thanks to andreykrupskii for this contribution!Merged inlineStr cell type support #15…

时空注意力机制深度解析:理论、技术与应用全景

时空注意力机制作为深度学习领域的关键技术&#xff0c;通过捕捉数据在时间和空间维度上的依赖关系&#xff0c;显著提升了时序数据处理和时空建模能力。本文从理论起源、数学建模、网络架构、工程实现到行业应用&#xff0c;系统拆解时空注意力机制的核心原理&#xff0c;涵盖…

wxWidgets 3.2.8 发布,修复了GTK下,wxStaticText显示文本异常的问题

详细如下&#xff1a; 3.2.8 是稳定的 3.2 系列中的最新维护版本&#xff0c;现已在 GitHub 上提供&#xff0c;您可以从中下载带有 所选 Windows 的库源和文档以及二进制文件 编译器&#xff0c;例如 Microsoft Visual C、MinGW-w64 和 TDM-GCC。您还可以阅读更新的文档 版本&…