在 Net7.0 环境下使用 RestSharp 发送 Http(FromBody和FromForm)请求

Http,环境,RestSharp ,使用 · 浏览次数 : 24

小编点评

**代码简介:** 这段代码展示了使用 RestSharp 访问 WebAPI 接口,并传输数据的方式。有两种方式可实现数据传输:`FromBody` 和 `FromForm`。 **代码实现:** **FromBody 方式:** ```csharp updateScannerSettingRequest.AddParameter("application/json", JsonConvert.SerializeObject(scannerSettingInputDto), ParameterType.RequestBody); ``` **FromForm 方式:** ```csharp updateScannerSettingRequest.AddParameter("ScannerId", scannerSettingInputDto.ScannerId); updateScannerSettingRequest.AddParameter("Camera1Id", scannerSettingInputDto.Camera1Id); // 其他参数... ``` **辅助类型 CommonJsonResult:** ```csharp public sealed class CommonJsonResult { public bool Success { get; set; } public int StateCode { get; set; } public string? Message { get; set; } public TResult? DataResult { get; set; } } ``` **总结:** 这段代码展示了使用 RestSharp 在 WebAPI 接口中发送数据的方法,包括使用 `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)请求相似的内容:

在 Net7.0 环境下使用 RestSharp 发送 Http(FromBody和FromForm)请求

一、简介 最近,在做一个数据传输的服务,我在一个Worker Service里面需要访问 WebAPI 接口,并传输数据,也可以提交数据。由于第一次使用 RestSharp 发送请求,也遇到了很多问题,不过最终把问题都解决了。什么东西都一样,第一次做都会才很多坑。 今天,我就两个小的知识点,就是通过

在 Net7.0环境下测试了 Assembly.Load、Assmebly.LoadFile和Assembly.LoadFrom的区别

一、简介 很长时间没有关注一些C#技术细节了,主要在研究微服务、容器、云原生、容器编排等高大上的主题了,最近在写一些框架的时候,遇到了一些和在 Net Framework 框架下不一样的情况,当然了,我今天主要测试的是,在通过【添加项目引用】和【手动拷贝DLL】的情况下,这三个方法加载程序集:Ass

在 Net7.0环境下通过反射创建对象和调用方法

一、介绍 最近没事干,就用闲暇时间写点东西,也记录一下温习历程。老人说的好,好记性,不如烂笔头。时间一长,当时记忆的再清楚,都会变得模糊,索性就写博客记录下来,如果下次需要,直接打开博客就找到了,不用去网上乱找了。 今天我要写一些有关反射创建类型实例和调用方法的文章,泛型的类型的创建和泛型方法的调用

8KB的C#贪吃蛇游戏热点答疑和.NET7版本

在之前的一篇文章《看我是如何用C#编写一个小于8KB的贪吃蛇游戏》中,介绍了在.NET Core 3.0的环境下如何将贪吃蛇游戏降低到8KB。不过也有很多小伙伴提出了一些疑问和看法,主要是下面这几个方面: .NET Core 3.0可以做到这么小,那么.NET7表现会不会更好? 不敢在生产中用这样的

【.NET 8】ASP.NET Core计划 - 支持更完善的AOT发布

.NET7.0刚发布不久,.NET社区开始了.NET8.0的开发,重心重新回到了新功能的迭代。 我们知道在.NET7.0中一个令人激动的特新就是支持了NativeAOT,我们可以通过NativeAOT生成本机程序,由于无需JIT编译,所以无需安装.NET Runtime,也进一步的提升了.程序的启动

【Azure 存储服务】.NET7.0 示例代码之上传大文件到Azure Storage Blob (一)

问题描述 在使用Azure的存储服务时候,如果上传的文件大于了100MB, 1GB的情况下,如何上传呢? 问题解答 使用Azure存储服务时,如果要上传文件到Azure Blob,有很多种工具可以实现。如:Azure 门户, Azure Storage Explorer, 命令行工具 az copy

【Azure 存储服务】.NET7.0 示例代码之上传大文件到Azure Storage Blob (二)

问题描述 在上一篇博文(【Azure 存储服务】.NET7.0 示例代码之上传大文件到Azure Storage Blob (一):https://www.cnblogs.com/lulight/p/17061631.html)中,介绍了第一种分片的方式上传文件。 本文章接着介绍第二种方式,使用 M

C#11之原始字符串

最近.NET7.0和C#11相继发布,笔者也是第一时间就用上了C#11,其中C#11的有一个更新能解决困扰我多年的问题,也就是文章的标题原始字符串。 在使用C#11的原始字符串时,发现的一些有意思的东西,超出了我原本对它的期待,话不多说,我们一起来看看。 多年的困扰 我不知道大家有没有写过这样的代码

.NET周报【12月第1期 2022-12-08】

国内文章 CAP 7.0 版本发布通告 - 支持延迟消息,性能炸了? https://www.cnblogs.com/savorboard/p/cap-7-0.html) 今天,我们很高兴宣布 CAP 发布 7.0 版本正式版,我们在这个版本中带来了大批新特性以及对性能的优化和改进。 使用.NET7

【炫丽】从0开始做一个WPF+Blazor对话小程序

大家好,我是沙漠尽头的狼。 .NET是免费,跨平台,开源,用于构建所有应用的开发人员平台。 本文演示如何在WPF中使用Blazor开发漂亮的UI,为客户端开发注入新活力。 注 要使WPF支持Blazor,.NET版本必须是 6.0 或更高版本,本文所有示例使用的.NET 7.0,版本要求见链接,截图