• 在 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 Taskstring>> 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.DeserializeObjectstring>>(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 /// 
     2     /// 该类型定义了以 JSON 为返回结果的通用数据格式。
     3     /// 
     4     /// 结果的返回类型。
     5     public sealed class CommonJsonResult
     6     {
     7         /// 
     8         /// 获取或者设置操作的结果是成功还是失败,True 表示操作成功,False 表示操作失败。
     9         /// 
    10         public bool Success { get; set; }
    11 
    12         /// 
    13         /// 获取或者设置操作的结果编码值。
    14         /// 
    15         public int StateCode { get; set; }
    16 
    17         /// 
    18         /// 获取或者设置操作的提示信息。
    19         /// 
    20         public string? Message { get; set; }
    21 
    22         /// 
    23         /// 获取或者设置数据的结果。
    24         /// 
    25         public TResult? DataResult { get; set; }
    26     }
    复制代码

     

    三、总结

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

  • 相关阅读:
    RabbitMQ里的几个重要概念
    洛谷千题详解 | P1007 独木桥【C++、Pascal语言】
    ccd电池充电器坏了
    python多线程(四)
    [附源码]java毕业设计一点到家小区微帮服务系统
    alginate-Ferrocene|海藻酸钠-二茂铁|二茂铁修饰改性海藻酸钠|海藻酸钠-peg-二茂铁
    gma 2.0.2 (2023.10.15) 更新日志
    一个简单计算器的实现
    下载安装包,platform的含义
    【Django】开发日报_3_Day:员工管理系统
  • 原文地址:https://www.cnblogs.com/PatrickLiu/p/17719992.html