在 Net7.0 环境下使用 RestSharp 发送 Http(FromBody和FromForm)请求
一、简介
最近,在做一个数据传输的服务,我在一个Worker Service里面需要访问 WebAPI 接口,并传输数据,也可以提交数据。由于第一次使用 RestSharp 发送请求,也遇到了很多问题,不过最终把问题都解决了。什么东西都一样,第一次做都会才很多坑。
今天,我就两个小的知识点,就是通过使用 RestSharp 访问 WebAPI,提交 FromBody 和 FromForm 两种方式的数据,还是有些区别的。我当初也搞了一段时间。
我先说一下我的编码环境:
操作系统:Windows 10 Professional
开发工具:Visual Studio 2022
客户端程序:Worker Service
服务端程序:Net Core WebAPI
框架版本:Net7.0
二、我的代码
以下我就介绍一下,使用 RestSharp、以FromBody 和 FromForm 两种方式提交数据的实现,废话不多说,直接上代码。如果是重点代码,我会以红色标注。
WebAPI 端的代码:
[HttpPost]
public async Task<CommonJsonResult<string>> AddOrUpdateScannerSetting([FromBody]/[FromForm] ScannerSettingInputDto inputDto)
{ }
其他的代码不用细看,都是我的逻辑代码。
Worker Service 端的代码:
1 using (RestClient restClient = new RestClient())
2 {
3 var updateScannerSettingRequest = new RestRequest(new Uri(updateScannerSettingUrl), Method.Post);
4 updateScannerSettingRequest.AddHeader("Authorization", "Bearer " + token);//增加的 JWT 认证
5 updateScannerSettingRequest.AddHeader("Accept", "application/json");
6 updateScannerSettingRequest.RequestFormat = DataFormat.Json;
7
8 #region [FromBody]接收,这里有两种方式,都是可以的
9
10 1、updateScannerSettingRequest.AddParameter("application/json", JsonConvert.SerializeObject(scannerSettingInputDto), ParameterType.RequestBody);
11 2、updateScannerSettingRequest.AddBody(scannerSettingInputDto);
12
13 #endregion
14
15 #region [FromForm]接收,所有字段都需要自己添加
16
17 updateScannerSettingRequest.AddParameter("ScannerId", scannerSettingInputDto.ScannerId);
18 updateScannerSettingRequest.AddParameter("Camera1Id", scannerSettingInputDto.Camera1Id);
19 updateScannerSettingRequest.AddParameter("Camera2Id", scannerSettingInputDto.Camera2Id);
20 updateScannerSettingRequest.AddParameter("Camera3Id", scannerSettingInputDto.Camera3Id);
21 updateScannerSettingRequest.AddParameter("Camera4Id", scannerSettingInputDto.Camera4Id);
22 updateScannerSettingRequest.AddParameter("Camera1IntegrationTime", scannerSettingInputDto.Camera1IntegrationTime);
23 updateScannerSettingRequest.AddParameter("Camera2IntegrationTime", scannerSettingInputDto.Camera2IntegrationTime);
24 updateScannerSettingRequest.AddParameter("Camera3IntegrationTime", scannerSettingInputDto.Camera3IntegrationTime);
25 updateScannerSettingRequest.AddParameter("Camera4IntegrationTime", scannerSettingInputDto.Camera4IntegrationTime);
26 updateScannerSettingRequest.AddParameter("Camera1Image", scannerSettingInputDto.Camera1Image);
27 updateScannerSettingRequest.AddParameter("Camera2Image", scannerSettingInputDto.Camera2Image);
28 updateScannerSettingRequest.AddParameter("Camera3Image", scannerSettingInputDto.Camera3Image);
29 updateScannerSettingRequest.AddParameter("Camera4Image", scannerSettingInputDto.Camera4Image);
30 updateScannerSettingRequest.AddParameter("ScannerCoordinate", scannerSettingInputDto.ScannerCoordinate);
31 updateScannerSettingRequest.AddParameter("PatrolFile", scannerSettingInputDto.PatrolFile);
32 updateScannerSettingRequest.AddParameter("WarningPhone", scannerSettingInputDto.WarningPhone);
33 updateScannerSettingRequest.AddParameter("IsUpdate", scannerSettingInputDto.IsUpdate);
34 updateScannerSettingRequest.AddParameter("Remarks", scannerSettingInputDto.Remarks);
35
36 #endregion
37
38 var updateScannerSettingResponse = await restClient.ExecuteAsync(updateScannerSettingRequest);
39 var updateScannerSettingContent = updateScannerSettingResponse.Content;
40 if (!string.IsNullOrEmpty(updateScannerSettingContent) && !string.IsNullOrWhiteSpace(updateScannerSettingContent))
41 {
42 var commontResultObject = JsonConvert.DeserializeObject<CommonJsonResult<string>>(updateScannerSettingContent);
43 if (commontResultObject != null && commontResultObject.Success)
44 {
45 result = true;
46 }
47 else
48 {
49 result = false;
50 _logger.LogError(updateScannerSettingContent);
51 }
52 }
53 else
54 {
55 result = true;
56 }
57 }
还有一个辅助类型:
1 /// <summary>
2 /// 该类型定义了以 JSON 为返回结果的通用数据格式。
3 /// </summary>
4 /// <typeparam name="TResult">结果的返回类型。</typeparam>
5 public sealed class CommonJsonResult<TResult>
6 {
7 /// <summary>
8 /// 获取或者设置操作的结果是成功还是失败,True 表示操作成功,False 表示操作失败。
9 /// </summary>
10 public bool Success { get; set; }
11
12 /// <summary>
13 /// 获取或者设置操作的结果编码值。
14 /// </summary>
15 public int StateCode { get; set; }
16
17 /// <summary>
18 /// 获取或者设置操作的提示信息。
19 /// </summary>
20 public string? Message { get; set; }
21
22 /// <summary>
23 /// 获取或者设置数据的结果。
24 /// </summary>
25 public TResult? DataResult { get; set; }
26 }
三、总结
好了,记录好了,下次自己有需要就不用急了。不忘初心,继续努力。
在 Net7.0 环境下使用 RestSharp 发送 Http(FromBody和FromForm)请求的更多相关文章
- [VS2015].NET4.0环境下使用.NET2.0程序集,使用sqlite时报异常 出现“混合模式程序集异常”
在.net 4.0环境下使用sqlite时报异常 混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集其调用的方法是从sqli ...
- VB6.0环境下的CATIA二次开发简介
CATIA作为CAD/CAE/CAM/PDM一体化的软件,广泛用于航空航天.汽车.船舶及电子工业,尤其在航空航天业,有八成以上厂商使用CATIA的市场[11].然而由于使用习惯和使用的侧重点不用,功能 ...
- Windows-Server-2008、IIS7.0环境下配置伪静态化
在Windows-Server-2008.IIS7.0环境下配置伪静态化 首先,是IIS7.0的配置,由于Windows Server 2008操作系统默认的IIS版本为 ...
- 使用zipkin2在SpringCloud2.0环境下追踪服务调用情况
1.目的: 使用zipkin2.0在Spring Cloud 2.0环境下,追踪服务调用情况. 2.所需组件: zipkin2.0,Spring Cloud 2.0,Eureka Server,Eur ...
- 转 Visual C++6.0 与matlab联合编程(2)----Visual C++6.0 环境下编译和调试MEX文件
我的最初想法是利用matlab的mex命令调用C++程序生成动态链接库的,但是测试程序(文中另附)通过了,自己的实际应用程序却没有过.还是把方法贴在这儿,以便自己以后进行整理. http://shij ...
- CentOS7 Zabbix4.0环境下的安装和配置实例
1.安装准备 Zabbix4.0对基础架构有一定的要求,对的英文尤其PHP状语从句:MySQL: 类型 内容 服务端运行环境 Linux和PHP与Web服务器和数据库 服务端操作系统 CentOS7. ...
- Hadoop2.2.0环境下Sqoop1.99.3安装
本文转载自http://blog.csdn.net/liuwenbo0920/article/details/40504045 1.安装准备工作: 已经装好的hadoop环境是hadoop 2.2.0 ...
- VC++6.0环境下调试c语言代码的方法和步骤_附图
1.C语言程序四步开发步骤 (1)编辑.可以用任何一种编辑软件将在纸上编写好的C语言程序输入计算机,并将C语言源程序文件*.c以纯文本文件形式保存在计算机的磁盘上(不能设置字体.字号等). (2)编译 ...
- cuda8.0环境下安装py-faster-rcnn问题总结
首先声明,由于之前安装的cuda8.0,在实践中出现各种问题,这里不是指安装环境问题,而是在训练模型是会阻止内核启动,因此让我不得不转战8.0,说出来都是泪啊,配个环境都配了一个礼拜了,所以,请不要轻 ...
- isapi_rewrite运行在.net framework 4.0+iis 6.0环境下404错误解决方案
今天以前的同事让我帮他上服务器看看,他把页面伪静态之后,出现404错误,为什么会出现这样的问题呢,仔细研究才发现,原因如下: 因为ASP.NET4.0在安装的过程中,已经在IIS6做了一些手脚,让它可 ...
随机推荐
- 2023-06-09:什么是Redis事务?原理是什么?
2023-06-09:什么是Redis事务?原理是什么? 答案2023-06-09: Redis中的事务是以一组命令的形式出现的,这些命令被认为是最小的执行单位.事务可以保证在一个单独独立的隔离操作中 ...
- GoldenEye项目实战
前言 "操千曲而后晓声,观千剑而后识器",下载靶机项目实战提升自我,这是一个涉及到渗透与CTF联合的实战项目. Descript: 我最近完成了一个OSCP类型的易受攻击机器的创建 ...
- 发布:iNeuOS工业互联网操作系统 V5 Preview1 版本(自主可控)
这半年来一直深耕包头,这个城市比较不错,但是推进项目的难度确实挺大的.与开发产品相比,后者更省心.但是光研发产品,没有项目依托,没办法产生价值.有些大学和研究院确实有好的产品,但是没有市场化能力,再好 ...
- StencilJs 学习之 JSX
Stencil 组件使用 JSX 渲染,这是一种流行的声明式模板语法.每个组件都有一个渲染函数,它返回在运行时渲染到 DOM 的组件树. 基础用法 render 函数用于输出将绘制到屏幕上的组件树. ...
- 现代C++(Modern C++)基本用法实践:零、概述&测试项目
序言 习惯上,我们把C++11之前的C++语法特性称之为"传统C++(traditional c++)",而把c++11之后的语法特性称之为现代C++(modern c++).有一 ...
- Hexo博客Next6.0版本主题配置(站内搜索、新建404界面、静态资源压缩、底部信息隐藏、各版块透明度修改、字数统计、推荐阅读、博文置顶、阅读进度、在线评论、运行时间)
新建404界面 在站点根目录下,输入hexo new page 404,在默认Hexo站点下/source/404/index.md 打开新建的404界面,编辑属于自己的404界面,可以显示腾讯公益4 ...
- RabbitMQ 中 exchange、route、queue 的关系
从 AMQP 协议可以看出,MessageQueue.Exchange 和 Binding 构成了 AMQP 协议的核心,下面我们就围绕这三个主要组件 从应用使用的角度全面的介绍如何利用 Rabbit ...
- vue基本操作[上] 续更----让世界感知你的存在
Vue引用js文件的多种方式 1.vue-cli webpack全局引入jquery (1)首先 npm install jquery --save (--save 的意思是将模块安装到项目目录下,并 ...
- 基准测试工具 --- BenchmarkDotNet
介绍 今天介绍一个非常强大的基于.Net 的基准测试工具BenchmarkDotNet. BenchmarkDotNet 已经被14300多个项目采用,包括非常多的知名开源项目,例如 dotnet/p ...
- PDF转换OFD(Java实用版)
前言: 在项目中用到了,就写一下哈 OFD简介 百度百科:https://baike.baidu.com/item/OFD/56227163?fr=aladdin OFD(Open Fixed-lay ...