首页 > 其他分享 >WPF开发中遇到的新知识 -- 2

WPF开发中遇到的新知识 -- 2

时间:2022-09-25 09:11:38浏览次数:46  
标签:return 请求 -- 知识 var new WPF Data response

RestSharp 的简单使用

目的:希望在WPF应用中发送HTTP请求,获取后台数据

方法:在网上的一些搜索结果中,推荐使用的方式有HttpClient、HttpClientFactory、refit和RestSharp,其中中间两个估计是属于在ASP下使用的库,找到的方法都是需要注册到IServiceCollection中,但是由于我的WPF使用的MVVM框架是Prism,Prism是使用DryIoc,而且不建议使用IServiceCollection,也就是ASP中默认的容器来扩展Prism的(试过几种方法,都无法成功注入),然后选用了RestSharp这个不依赖任何环境的,纯粹的.NET的第三方库

使用:

首先说明一下,RestSharp 提供了一些名字上符合Restful风格的API,但是在返回结果的时候,如果请求出错,会直接报错,所以要么需要加try-catch,或者使用比较原始的API请求(我选用这种)

  • 首先是需要创建一个工厂来返回客户端,官方提醒,客户端应该是单例的,不然会有耗尽socket的风险
public class HttpClientFactory
{
    private readonly RestClient _restClient;
    
    public HttpClientFactory()
    {
        _restClient = new RestClient("http://localhost:5000");
    }
}
  • 然后将需要请求的内容一同放到工厂内部,更像是一个工具类,而不是工厂,可以为每一种API创建不同的工具类,来分割不同的请求

GET 请求

public async Task<ApiResponse<IEnumerable<ActionArg>>> GetAllActionArgs()
{
    var request = new RestRequest("/action/getAll");
    var response = await _restClient.ExecuteAsync<ApiResponse<IEnumerable<ActionArg>>>(request);
    if (response.IsSuccessful)
    {
        return response.Data;
    }
    
    Logger.Warn($"请求失败:{response.StatusCode},错误原因: {response.Content}");
    return new ApiResponse<IEnumerable<ActionArg>>(false, "请求失败");
}

POST 请求

public async Task<ActionArg> AddActionArgs(ActionArg actionArg)
{
    var request = new RestRequest($"/action/add", Method.Post).AddJsonBody(actionArg);
    var response = await _restClient.ExecuteAsync<ApiResponse<ActionArg>>(request);

    if (response.IsSuccessful && response.Data is not null)
    {
        return response.Data.Result ? response.Data.Data : actionArg;
    }
    
    Logger.Warn($"请求失败:{response.StatusCode},错误原因:{response.Content}");
    return actionArg;
}

DELETE 请求

public async Task<ApiResponse<object>> DeleteActionRule(MapActionRule rule)
{
    var request = new RestRequest("/actionRule/delete", Method.Delete).AddJsonBody(rule);
    var response = await _restClient.ExecuteAsync<ApiResponse<object>>(request);

    if (response.IsSuccessful)
    {
        return response.Data;
    }
    
    Logger.Warn($"请求失败:{response.StatusCode},错误原因: {response.Content}");
    return new ApiResponse<object>(false, "请求失败");
}
  • 基本上对于返回结果的处理都差不多,但是好处是,它不会因为请求出错而抛出异常,可以通过检查响应结果并记录日志的方式,处理请求错误,而且不需要添加try-catch(个人不喜欢)

标签:return,请求,--,知识,var,new,WPF,Data,response
From: https://www.cnblogs.com/huangwenhao1024/p/16727236.html

相关文章

  • token 登录模式了解过吗 ?
    token是服务器端生成的一个字符串,当作客服端请求的一个令牌,在第一次登陆成功之后,服务器端会生成一个token,客户端必须要携带token才能请求数据token的具体逻辑如下:......
  • nacos 临时实例与持久实例
    nacos临时实例与持久实例一、两者区别 临时实例   默认情况,服务实例仅会注册在Nacos内存,不会持久化到Nacos磁盘,其健康检测机制为Client模式,即Client主动向Server上报......
  • P8548 小挖的买花
    小挖的买花题目背景小挖喜欢买花,但是ta太懒了!所以这个任务全权交给了你。题目描述花店里只有\(n\)株花,每一株花都有三个属性:价格\(cost_i\)、美丽度\(be_i\)、新......
  • seata的部署和集成
    seata的部署和集成一、部署Seata的tc-serverwindow版安装1.下载首先我们要下载seata-server包,地址在http://seata.io/zh-cn/blog/download.html   2.解压在非......
  • 讲讲回流和重绘的区别,如何避免回流和重绘?
    回流:当元素的尺寸,结构属性改变,浏览器需要重新渲染部分或全部文档流的过程浏览器首次加载元素尺寸位置改变元素内容改变字体大小改变添加删除dom元素重绘:元素样......
  • typedef 结构体类型名可以相同
    typedefstructWebsMime{ char*type;/**<Mimetype*/ char*ext;/**<Fileextension*/}WebsMi......
  • CSS边框
    一、CSSborder属性用于指定元素边框的样式、宽度和颜色。即使用border-style,通过设置其适当的值来更改样式。border-style允许的值包括:--dotted:定义点线边框。--dash......
  • ASP.NET Core使用承载启动(HostingStartup)程序集
    概念#    在ASP.NETCore中我们可以使用一种机制来增强启动时的操作,它就是HostingStartup。如何叫"增强"操作,相信了解过AOP概念的同学应该都非常的熟悉。我们常说AOP......
  • This MySqlConnectioin is already in Use异常处理
    ThisMySqlConnectioinisalreadyinUse异常处理记录今天使用EFCore和Mysql的时候,遇到了一个问题,具体描述如下:Nuget安装了Pomelo.EntityFrameworkCore.MySql,然后在同......
  • Vue的nextTick的原理
    知识储备:事件循环有宏任务和微任务,宏任务所处的队列就是宏任务队列,队列可以有多个,第一个队列只有一个任务就是执行主线程的js代码,剩余队列任务有setTimeoutsetInterval微......