• 在 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     }
    复制代码

     

    三、总结

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

  • 相关阅读:
    首个中文Stable Diffusion模型开源;TPU演进十年;18个PyTorch性能优化技巧 | AI系统前沿动态...
    Langchain-实战篇-搭建本地问答机器人-01
    Ajax入门及jQuery库对Ajax的封装
    打印不同商品价格(使用父类作为返回值实现打印不同类型商品价格)
    .NET 7 AOT 的使用以及 .NET 与 Go 互相调用
    19. input( )输入函数课后练习
    Kotlin+MVVM 构建todo App 应用
    靠这一份面试文档,我花了2个通宵看完,最终拿到阿里offer
    Go语言 映射(Map)
    牛客网前端刷题(一)
  • 原文地址:https://www.cnblogs.com/PatrickLiu/p/17719992.html