WPF怎么通过RestSharp向后端发请求

1.下载RestSharpNuGet包

2.请求类和响应类

cs 复制代码
public class ApiRequest
{
    /// <summary>
    /// 请求地址
    /// </summary>
    public string Route { get; set; }

    /// <summary>
    /// 请求方式
    /// </summary>
    public Method Method { get; set; }

    /// <summary>
    /// 请求参数
    /// </summary>
    public Object Parameters { get; set; }

    /// <summary>
    /// 请求头,表示发送的请求的类型、数据格式等
    /// </summary>
    public string ContentType { get; set; } = "application/json";
}
cs 复制代码
public class ApiResponse
{
    public int Code { get; set; }

    public string Msg { get; set; }

    public Object Data { get; set; }
}

3.封装请求工具类

cs 复制代码
 public class HttpClient
 {
     private readonly RestClient Client; // 客户端
     private readonly string baseUrl = "http://localhost:63615/api/";

     public HttpClient()
     {
         Client = new RestClient();
     }

     /// <summary>
     /// 执行请求
     /// </summary>
     /// <param name="request">请求数据</param>
     /// <returns>响应数据</returns>
     public ApiResponse Execute(ApiRequest ApiRequest)
     {
         var request = new RestRequest(ApiRequest.Method);

         request.AddHeader("Content-Type", ApiRequest.ContentType);

         if (ApiRequest.Parameters!= null)
         {
             // SerializeObject 序列化参数 object -> json
             request.AddParameter("params", 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 -> object
             return JsonConvert.DeserializeObject<ApiResponse>(res.Content);
         }
         else
         {
             return new ApiResponse { Code = (int)res.StatusCode, Msg = res.ErrorMessage };
         }
     }
 }
  1. 在接口中引入该类,并在构造函数中初始化
cs 复制代码
private readonly IEventAggregator _eventAggregator;
cs 复制代码
public LoginUCViewModel(HttpClient httpClient)
{
    //请求Client
    _httpClient = httpClient;
}

5.注入我们的请求服务(这里我用的是prism框架,写法可能有所不同,但是思路是一样的)

cs 复制代码
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
   //请求
    containerRegistry.GetContainer().Register<HttpClient>(made: Parameters.Of.Type<string>(serviceKey: "webUrl"));
}

6.发送请求

cs 复制代码
// 发送请求
ApiRequest apiRequest = new ApiRequest();
// 请求方式
apiRequest.Method = RestSharp.Method.POST;
// 请求地址(这里只写这一段是因为定义的时候定义了baseUrl
apiRequest.Route = "Account/Register";
AccountInfoDto.Password = Md5Helper.GetMd5(AccountInfoDto.Password);
apiRequest.Parameters = AccountInfoDto;
ApiResponse response = _httpClient.Execute(apiRequest);

到此,简单的请求封装就结束了

相关推荐
AlienZHOU9 分钟前
从零开始,跟着写一个产品级 Coding Agent
前端
RichardZhiLi13 分钟前
大前端全栈实践课程:章节二(前端工程化建设)
前端
毕设源码-赖学姐16 分钟前
【开题答辩全过程】以 基于VUE的环保网站设计为例,包含答辩的问题和答案
前端·javascript·vue.js
ZTrainWilliams17 分钟前
swagger-mcp-toolkit 让 AI编辑器 更快“读懂并调用”你的接口
前端·后端·mcp
伊步沁心31 分钟前
深入 useEffect:为什么 cleanup 总比 setup 先跑?顺手手写节流防抖 Hook
前端
小J听不清35 分钟前
CSS 字体样式全解析:字体类型 / 大小 / 粗细 / 样式
前端·javascript·css·html·css3
500佰37 分钟前
pencil on claude 让设计师和程序员少吵架的一种可能
前端
Jane-lan40 分钟前
NVM安装以及可能的坑
前端·node·nvm
幽络源小助理43 分钟前
Typecho大前端新闻博客主题源码下载:资讯门户风格模板安装教程 | 幽络源
前端
简离1 小时前
Git 一次性清理已跟踪但应忽略文件
前端·git