首页 > 其他分享 >在 Net7.0 环境下使用 RestSharp 发送 Http(FromBody和FromForm)请求

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

时间:2023-09-21 15:33:05浏览次数:38  
标签:Http FromForm FromBody AddParameter updateScannerSettingRequest public scannerSe

一、简介
    最近,在做一个数据传输的服务,我在一个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     }

 

三、总结

     好了,记录好了,下次自己有需要就不用急了。不忘初心,继续努力。

标签:Http,FromForm,FromBody,AddParameter,updateScannerSettingRequest,public,scannerSe
From: https://www.cnblogs.com/PatrickLiu/p/17719992.html

相关文章

  • TidHTTP的post编码,老掉牙的问题
    TidHTTP使用post时,需要提交json字符串。那么采用什么编码,这个问题就头大了。目前xe已经不要考虑编码转换问题。但是....我们使用ISuperObject操控json。那么最后提交到post的数据应该是这样?idHttp.post(urURL,stream)idhtp1.Post('http://123.124.211.113:9050/myMoth',Reque......
  • Restful API 接口测试工具 HTTP Client
    HTTPClient软件项目开发有很多RESTfulAPI接口需要运行来验证效果,所以急需一款高效的接口测试工具。可能大家用的比较多的是swagger或者postman,这2个确实不错,不过这里我给大家推荐一种更简单的接口测试工具。这款工具就是idea中的自带的:HTTPClient,这款工具特别好用,主......
  • 使用openssl创建ssl证书,用于测试https服务
    一个web站点要对外提供https服务就需要ssl证书,ssl证书可以从云服务厂商那里购买,通常也能申请到免费的,但是如果只是为了测试,则可以使用openssl来创建ssl证书。下面是完整的生成过程:第一步:创建私钥opensslgenrsa-outserver.key2048第二步:创建签名请求文件opensslreq-new-key......
  • IIS报错:HTTP 错误 404.17 - Not Found
    新建处理程序映射 *.svc%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dllsvc-ISAPI-4.0*.svc%SystemRoot%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dllsvc-ISAPI-4.0-64......
  • IIS报错:HTTP 错误 404.2 - Not Found 由于Web服务器上的”ISAPI和CGI限制”列表设置,无
     解决方法:  ......
  • Clone fail unable to access 'httpsgithub.comLovi-githubmyUserCenter.git' OpenSSL
    bug:unabletoaccess'https://github.com/xxx':OpenSSLSSL_read:SSL_ERROR_SYSCALL,errno10054关于git提交github出现errno10054、port443:Timedout等问题解决_git提交10054_husishuai的博客-CSDN博客按照上边的解决方法即可......
  • HttpServletRequest 方法详解
    request.setCharacterEncoding("utf-8");//设置request编码方式 request.getLocalAddr();//获取本地IP,即服务器IP request.getLocalName();//获取本地名称,即服务器名称 request.getLocalPort();//获取本地端口号,即Tomcat端口号 request.getLocale();//用户的语言环境 req......
  • HTTP响应头信息和请求头信息详解
    web性能测试中有一个web资源分析,web资源是从服务器入手对web服务器的性能进行分析。所以了解一下以下信息是很有必要的哦。一:响应头信息HTTP(HyperTextTransferProtocol)是超文本传输协议的缩写,它用于传送WWW方式的数据,关于HTTP协议的详细内容请参考RFC2616。HTTP协议采用了请求/响......
  • Http Fetch+StreamSaver.js在内存有限的设备下载大文件
    目前前端没有很好的api支持流式的文件的分片下载。如果直接把整个文件保存到Blob对象中再保存,有可能出现很多不可以预期的问题,可能会因为达到浏览器的Blob对象上限而下载失败。也有机会因为客户端内存太低而导致OOM。那如果我们有额外的文件服务器的话,可以选择把文件先导出到文件......
  • HTTP请求中,几种常见的Content-Type类型
    一、application/x-www-form-urlencoded最常见的POST提交数据的方式,原生Form表单,如果不设置enctype属性,默认为application/x-www-form-urlencoded方式提交数据。首先,Content-Type被指定为application/x-www-form-urlencoded;其次,提交的表单数据会转换为键值对并按照key1=v......