当前位置: 首页 > news >正文

Winform使用HttpClient调用WebApi的基本用法

  Winform程序调用WebApi的方式有很多,本文学习并记录采用HttpClient调用基于GET、POST请求的WebApi的基本方式。WebApi使用之前编写的检索环境检测数据的接口,如下图所示。
在这里插入图片描述

调用基于GET请求的无参数WebApi

  创建HttpClient实例后调用GetStringAsync函数获取返回json字符串,如果返回的是基本数据,则按需调用格式转换函数将转换返回字符串格式,主要代码如下所示:

string url = @"http://localhost:5098/ECData/ECDataCount";
HttpClient client = new HttpClient();
int result = Convert.ToInt32(client.GetStringAsync(url).Result);

  如果返回复杂数据格式,则需预定义数据类,然后调用反序列化函数将返回的json字符串反序列化为指定数据类型的实例对象。需注意的是返回的json字符串中的属性名称的大小写与数据类定义中的属性名称大小写的对应关系。本文测试时使用System.Text.Json反序列化,并配置JsonSerializerOptions忽略大小写。主要代码如下所示:

 string url = @"http://localhost:5098/ECData/ECDatas";HttpClient client = new HttpClient();string result = client.GetStringAsync(url).Result;JsonSerializerOptions options = new JsonSerializerOptions();options.PropertyNameCaseInsensitive = true;List< EnvironmentRecord> lstRecords= JsonSerializer.Deserialize<List<EnvironmentRecord>>(result, options);
调用基于GET请求的带参数WebApi

  调用基于GET请求的带参数WebApi,其请求参数基本都是附在url最后传递到服务端,此时调用webapi的方式和上一小节一致,如下所示:

string url = @"http://localhost:5098/ECData/List?page=1";
HttpClient client = new HttpClient();
string result = client.GetStringAsync(url).Result;
JsonSerializerOptions options = new JsonSerializerOptions();
options.PropertyNameCaseInsensitive = true;
ListFuncResult lstRecords = JsonSerializer.Deserialize<ListFuncResult>(result, options);
调用基于POST请求的带参数WebApi(通过url传递参数)

  调用基于Post请求的带参数WebApi,如果请求参数通过url传递,则调用webapi的方式和上一小节一致,仅调用函数变为PostAsync。主要代码如下所示:

string url = @"http://localhost:5098/ECData/DataTableListByPost?page=1&limit=10";
HttpClient client = new HttpClient();
string result = client.PostAsync(url,null).Result.Content.ReadAsStringAsync().Result;
JsonSerializerOptions options = new JsonSerializerOptions();
options.PropertyNameCaseInsensitive = true;
DataTableFuncResult lstRecords = JsonSerializer.Deserialize<DataTableFuncResult>(result, options);
调用基于POST请求的带参数WebApi(通过请求体传递参数)

  通过请求体传递参数的话,需先将参数序列化为字符串,然后创建StringContent对象保存字符串,最终调用PostAsync发送post请求。主要代码如下所示:

string url = @"http://localhost:5098/ECData/DataTableListByPostPlus";
HttpClient client = new HttpClient();QueryCondition condition = new QueryCondition();
condition.page = 1;
condition.limit = 10;var content = new StringContent(JsonSerializer.Serialize<QueryCondition>(condition), Encoding.UTF8);
content.Headers.Remove("Content-Type");
content.Headers.Add("Content-Type", "application/json");string result = client.PostAsync(url, content).Result.Content.ReadAsStringAsync().Result;
JsonSerializerOptions options = new JsonSerializerOptions();
options.PropertyNameCaseInsensitive = true;
DataTableFuncResult lstRecords = JsonSerializer.Deserialize<DataTableFuncResult>(result, options);

参考文献:
[1]https://blog.csdn.net/yanzean/article/details/126860942
[2]https://blog.csdn.net/lg_2_lr/article/details
[3]https://www.cnblogs.com/rengke2002/p/7921003.html

http://www.lryc.cn/news/387520.html

相关文章:

  • python–基础篇–正则表达式–是什么
  • 15 个适用于企业的生成式 AI 用例
  • 若依框架中组件使用教程
  • 秋招力扣刷题——数据流的中位数
  • 51单片机学习——LED功能一系列实现
  • 互联网大厂核心知识总结PDF资料
  • 设计模式-状态模式和策略模式
  • Java NIO Buffer概念
  • Kubernetes在Java应用部署中的最佳实践
  • IOS Swift 从入门到精通:@escaping 和PreferenceKey
  • 基于PHP技术的校园论坛设计的设计与实现-计算机毕业设计源码08586
  • 开机弹窗缺失OpenCL.dll如何解决?分享5种靠谱的解决方法
  • IIS 服务器安装SSL证书
  • 二叉树第二期:堆的实现与应用
  • python-求出 e 的值
  • 模型微调方法
  • cesium使用cesium-navigation-es6插件创建指南针比例尺
  • go sync包(七)Sync.Map
  • Batch文件中的goto命令:控制流程的艺术
  • 【chatgpt】两层gcn提取最后一层节点输出特征,如何自定义简单数据集
  • Java面试题:讨论你如何保持对Java生态系统中新技术的了解
  • 深度学习之Transformer模型的Vision Transformer(ViT)和Swin Transformer
  • 玩个游戏 找以下2个wordpress外贸主题的不同 你几找到几处
  • React Native优质开源项目推荐与解析
  • 树莓派安装windows系统
  • CSS-position/transform
  • 面试题之一
  • 494. 目标和 Medium
  • 如何实现灌区闸门控制自动化?宏电“灌区哨兵”为灌区闸门控制添“智慧”动能
  • PHP电商系统开发指南数据库管理