RestSharp和Newtonsoft.Json结合发送和解析http

news2025/4/18 21:35:59

1.下载RestSharp和Newtonsoft.Json

image-20250417140927406

2编写ApiRequest和ApiResponse和调用工具类HttpRestClient

image-20250417141017271

请求模型

  /// <summary>
  /// 请求模型
  /// </summary>
  public class ApiRequest
  {
      /// <summary>
      /// 请求地址/api路由地址
      /// </summary>
      public string Route { get; set; }
 ​
      /// <summary>
      /// 请求方式(Post,Get,Delete,Put)
      /// </summary>
      public Method Method { get; set; }
 ​
      /// <summary>
      /// 请求参数
      /// </summary>
      public object Parameters {  get; set; }
 ​
      /// <summary>
      /// 发送的数据类型(默认是json)
      /// </summary>
      public string ContentType { get; set; } = "application/json";
  }

接收模型

 /// <summary>
 /// 接收模型
 /// </summary>
 public class ApiResponse
 {
     /// <summary>
     /// 结果编码
     /// </summary>
     public int ResultCode { get; set; }
 ​
     /// <summary>
     /// 结果信息
     /// </summary>
     public string Msg { get; set; }
 ​
     /// <summary>
     /// 数据
     /// </summary>
     public object ResultData { get; set; }
 }

http调用工具类,要对应后端接口把baseUrl替换掉

 /// <summary>
 /// 调用api工具类
 /// </summary>
 public class HttpRestClient
 {
     private readonly RestClient Client;
 ​
     private readonly string baseUrl = "http://localhost:10036/api/";
     
     public HttpRestClient()
     {
         Client = new RestClient();
     }
     /// <summary>
     /// 请求
     /// </summary>
     /// <param name="request">请求数据</param>
     /// <returns>接收数据</returns>
     public ApiResponse Execute(ApiRequest apiRequest)
     {
         //请求方式
         RestRequest request = new RestRequest(apiRequest.Method);
         //请求内容
         request.AddHeader("Content-Type", apiRequest.ContentType);
         if (apiRequest.Parameters != null)
         {
             request.AddParameter("param",JsonConvert.SerializeObject(apiRequest.Parameters),ParameterType.RequestBody);
         }
 ​
         //请求地址
         Client.BaseUrl = new Uri(baseUrl + apiRequest.Route);
 ​
         var res=Client.Execute(request);
 ​
         //请求成功
         if (res.StatusCode == System.Net.HttpStatusCode.OK)
         {
             //把json格式反序列化成对象
             return JsonConvert.DeserializeObject<ApiResponse>(res.Content);
         }
         //失败
         else
         {
             return new ApiResponse { ResultCode = -99, Msg = "服务器忙,请稍后" };
         }
     }
 }

3.Prism依赖注入HttpRestClient

  public partial class App : PrismApplication
  {
      protected override Window CreateShell()
      {
          //设置启动页
          return Container.Resolve<MainWin>();
      }
 ​
      /// <summary>
      /// 依赖注入
      /// </summary>
      /// <param name="containerRegistry"></param>
      protected override void RegisterTypes(IContainerRegistry containerRegistry)
      {
         containerRegistry.GetContainer().Register<HttpRestClient>(made: Parameters.Of.Type<string>(serviceKey: "webUrl"));
 ​
      }
 ​
 ​
  }

4.用一个登录例子说明

 private void Login()
 {
     if (string.IsNullOrEmpty(LoginAccountDTO.Account) || string.IsNullOrEmpty(LoginAccountDTO.Password))
     {
         //MessageBox.Show("账号或密码未输入");
         aggregator.GetEvent<MsgEvent>().Publish("账号或密码未输入");
         return;
     }
 ​
     //创建请求
     ApiRequest apiRequest = new ApiRequest();
     apiRequest.Method = RestSharp.Method.GET;
     LoginAccountDTO.Password=Md5Helper.GetMd5(LoginAccountDTO.Password);
     apiRequest.Route = $"Account/Login?account={LoginAccountDTO.Account}&password={LoginAccountDTO.Password}";
     ApiResponse response = httpRestClient.Execute(apiRequest);
 ​
     //登陆成功
     if (response.ResultCode == 1)
     {
         //反序列化json
         LoginAccountDTO loginAccountDTO = JsonConvert.DeserializeObject<LoginAccountDTO>(response.ResultData.ToString());
         DialogParameters parameters = new DialogParameters();
         parameters.Add("LoginName", loginAccountDTO.Name);
         RequestClose(new DialogResult(ButtonResult.OK, parameters));
     }
     //登陆失败
     else
     {
         //MessageBox.Show(response.Msg);
         aggregator.GetEvent<MsgEvent>().Publish(response.Msg);
     }
 ​
 }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2337554.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Pytorch之一】--torch.stack()方法详解

torch.stack方法详解 pytorch官网注释 Parameters tensors&#xff1a;张量序列&#xff0c;也就是要进行stack操作的对象们&#xff0c;可以有很多个张量。 dim&#xff1a;按照dim的方式对这些张量进行stack操作&#xff0c;也就是你要按照哪种堆叠方式对张量进行堆叠。dim的…

数据中台(大数据平台)之数据资源目录

数据资源目录是数据管理的账本&#xff0c;是数据应用的基础&#xff0c;更是是数据治理成果的体现&#xff0c;因此数据中台产品应提供数据资源目录编制、发布、资源挂载、下架的管理能力。 1.数据资源目录分类 资源目录能够支持基于业务特点创建和维护基础目录分类和特色目…

【随身WiFi】随身WiFi Debian系统优化教程

0.操作前必看 本教程基于Debian系统进行优化&#xff0c;有些操作对随身WiFi来说可能会带来负优化&#xff0c;根据需要选择。 所有操作需要在root用户环境下运行&#xff0c;否则都要加sudo 随身wifi Debian系统&#xff0c;可以去某安的随声WiFi模块自行搜索刷机 点赞&am…

JAVA Web_定义Servlet2_学生登录验证Servlet

题目 页面StudentLogin.html中有一HTML的表单代码如下&#xff1a; <form action"studentLogin" method"post">学生姓名&#xff1a;<input type"text" name"stuName" value""><br>登录密码&#xff1a;…

Unity入门笔记(缘更)

内容来源SiKi学院的Luna’s Fantasy 文章目录 一、基础知识1.准备2.基础知识1.层级(Layer)2.轴心点3.预制体(Prefab)4.刚体组件(Rigidbody)5.碰撞器组件(BoxCollider) 二、代码1.移动 一、基础知识 1.准备 Unity安装&#xff1a; https://unity.cn 2.基础知识 1.层级(Layer…

【Python】用Python写一个俄罗斯方块玩玩

【Python】用Python写一个俄罗斯方块玩玩 一、引言1.成品效果展示 二、思考准备1.思考设计2.代码设计2.1 游戏页面2.2 控件设计2.2.1 方块生成2.2.2 方块碰撞2.2.3 方块消融2.2.4 游戏主循环2.2.5 游戏窗口 三、游戏完整版 一、引言 今日看到侄子在玩游戏&#xff0c;凑近一看…

记录一次生产中mysql主备延迟问题处理

登录库&#xff1a; mysql -uXXXX -pXXXX -P3306 -hXXXXXX -A 备库上执行&#xff1a;show slave status\G 查看 seconds_Behind_Master&#xff0c;延迟 2705s&#xff0c;而且还一直在增加。 SHOW CREATE TABLE proc_i_income_temp; -- 查看表的结构 show index from proc…

ffmpeg无损转格式的命令行

将ffmpeg.exe拖入命令行窗口 c:\users\zhangsan>D:\ffmpeg-2025-03-11\bin\ffmpeg.exe -i happy.mp4 -c:v copy -c:a copy 格式转换后.mkv -c:v copy 仅做拷贝视频,不重新编码 -c:a copy 仅做拷贝音频 ,不重新编码

强化学习算法系列(五):最主流的算法框架——Actor-Critic算法框架

强化学习算法 &#xff08;一&#xff09;动态规划方法——策略迭代算法(PI)和值迭代算法(VI) &#xff08;二&#xff09;Model-Free类方法——蒙特卡洛算法(MC)和时序差分算法(TD) &#xff08;三&#xff09;基于动作值的算法——Sarsa算法与Q-Learning算法 &#xff08;四…

设计模式(结构型)-桥接模式

目录 摘要 定义 类图 角色 具体实现 优缺点 优点 缺点 使用场景 使用案例 JDBC 和桥接模式 总结 摘要 在软件开发领域&#xff0c;随着系统规模和复杂性的不断攀升&#xff0c;如何设计出具有良好扩展性、灵活性以及可维护性的软件架构成为关键挑战。桥接模式作为一…

【MySQL】MySQL数据库 —— 简单认识

目录 1. 数据库的介绍 1.1 什么是数据库 1.2 数据库和数据结构之间关系 2. 数据库分类 2.1 关系型数据库&#xff08;RDBMS&#xff09; 2.2 非关系型数据库 2.3 区别 一些行内名词简单解释&#xff1a; 3. 关于mysql 主要学什么 4. MySQL中重要的概念 4.1 概念 4…

RNN - 语言模型

语言模型 给定文本序列 x 1 , … , x T x_1, \ldots, x_T x1​,…,xT​&#xff0c;语言模型的目标是估计联合概率 p ( x 1 , … , x T ) p(x_1, \ldots, x_T) p(x1​,…,xT​)它的应用包括 做预训练模型&#xff08;eg BERT&#xff0c;GPT-3&#xff09;生成本文&#xff…

过拟合、归一化、正则化、鞍点

过拟合 过拟合的本质原因往往是因为模型具备方差很大的权重参数。 定义一个有4个特征的输入&#xff0c;特征向量为,定义一个模型&#xff0c;其只有4个参数&#xff0c;表示为。当模型过拟合时&#xff0c;这四个权重参数的方差会很大&#xff0c;可以假设为。当经过这个模型后…

【python画图】:从入门到精通绘制完美柱状图

目录 Python数据可视化&#xff1a;从入门到精通绘制完美柱状图一、基础篇&#xff1a;快速绘制柱状图1.1 使用Matplotlib基础绘制1.2 使用Pandas快速绘图 二、进阶篇&#xff1a;专业级柱状图定制2.1 多系列柱状图2.2 堆叠柱状图2.3 水平柱状图 三、专业参数速查表Matplotlib …

基础知识:离线安装docker、docker compose

(1)离线安装docker 确认版本:Ubuntu 18.04 LTS - bionic 确认架构:X86_64 lsb_release -a uname -a 官方指南:https://docs.docker.com/engine/install/ 选择Ubuntu,发现页面上最低是Ubuntu20.04, 不要紧

畅游Diffusion数字人(27):解读字节跳动提出主题定制视频生成技术Phantom

畅游Diffusion数字人(0):专栏文章导航 前言:主题定制视频生成,特别是zero-shot主题定制视频生成,一直是当前领域的一个难点,之前的方法效果很差。字节跳动提出了一个技术主题定制视频生成技术Phantom,效果相比于之前的技术进步非常显著。这篇博客详细解读一下这一工作。 …

《Adaptive Layer-skipping in Pre-trained LLMs》- 论文笔记

作者&#xff1a;Xuan Luo, Weizhi Wang, Xifeng Yan Department of Computer Science, UC Santa Barbara xuan_luoucsb.edu, weizhiwangucsb.edu, xyancs.ucsb.edu 1. 引言与动机 1.1 背景 LLM 的成功与挑战: 大型语言模型 (LLMs) 在翻译、代码生成、推理等任务上取得巨大成…

微信小程序实现table样式,自带合并行合并列

微信小程序在代码编写过程好像不支持原生table的使用&#xff0c;在开发过程中偶尔又得需要拿table来展示。 1.table效果展示 1.wxml <view class"table-container"><view class"table"><view class"table-row"><view cla…

电脑的品牌和配置

我的笔记本是2020年买的&#xff0c;之前的订单找不到了&#xff0c;就知道是联想&#xff0c;不清楚具体的配置。 本文来源&#xff1a;腾讯元宝 检查系统信息&#xff08;Windows&#xff09; 这通常是 ​​联想&#xff08;Lenovo&#xff09;​​ 的型号代码。 81XV 是联想…

Redis面试——常用命令

一、String &#xff08;1&#xff09;设置值相关命令 1.1.1 SET 功能&#xff1a;设置一个键值对&#xff0c;如果键已存在则覆盖旧值语法&#xff1a; SET key value [EX seconds] [PX milliseconds] [NX|XX]EX seconds&#xff1a;设置键的过期时间为 seconds 秒 PX milli…