【RestSharp112封装】

RestSharp 最新版本112的请求封装

刚接触就是112版本,找了一圈发现没有封装的例子,现在的版本和106的封装有些地方又不一样,所以自己上蹿下跳捣鼓出来一个成功的封装,留存一下。
直接上代码,备注写的很详细了。

/// <summary>
/// 调用API 工具类
/// 先定义工具然后去App.xaml.cs注入
/// </summary>
public class HttpRestClient
{
    public readonly RestClient Client; // 客户端
    /// <summary>
    /// 请求地址公共部分
    /// </summary>
    private readonly string baseUrl = "http://localhost:48512/api/"; // 基础地址
    /// <summary>
    /// 构造函数
    /// </summary>
    public HttpRestClient()
    {
        Client = new RestClient(baseUrl);
    }

    /// <summary>
    /// 请求
    /// </summary>
    /// <param name="apiRequest">请求的数据</param>
    /// <returns>接收的数据</returns>
    public ApiResponse Execute(ApiRequest apiRequest)
    {
        RestRequest request = new RestRequest(apiRequest.Route, apiRequest.Method); // 请求地址 请求方法
        request.AddHeader("Content-Type", apiRequest.ContentType); // 设置请求头

        // 请求参数
        if (apiRequest.Parameters != null)
        {
            // 参数类型设置为了json,这里的类型是Object,所以需要类型转换
            // json序列化 对象->json字符串
            // request.AddParameter(JsonConvert.SerializeObject(apiRequest.Parameters), ParameterType.RequestBody);

            // 可能有未知的错误发生,所以这里用AddJsonBody才能顺利请求,不然会报错请求错误,要么是contentType的问题要么是序列化的问题
            request.AddJsonBody(apiRequest.Parameters);  // 自动将对象序列化为 JSON 并添加到请求体中,且自动处理 Content-Type
        }
        var response = Client.Execute(request); // 发送请求
        if (response.StatusCode == System.Net.HttpStatusCode.OK)
        {
            // 请求成功
            // 反序列化 json字符串->对象
            return JsonConvert.DeserializeObject<ApiResponse>(response.Content);
        }
        else
        {
            return new ApiResponse()
            {
                ResultCode = -99,
                Msg = response.ErrorMessage, // 详细错误信息
                // Msg = "服务器忙,请稍后", // 自定义错误信息 详细错误信息一般写在日志里面
            };
        }
    }
}
  • 主要就是baseUrl 的注入的地方是在实例化那里,然后详细路径是放在request里面,而之前的教程106版本都是拼接完整路径之后再给Client,调用.BaseUrl方法,但是112版本没有这个方法。
  • 还有就是AddJsonBody了,这里用序列化再AddParameter一直报错400,请求有问题,我觉得是我的请求头contentType的设置有问题,但是找不到原因,也不知道该怎么改,直接用AddJsonBody的话,他是可以自动序列化参数并且同时设置好请求头类型为application/json的,就不需要我做什么了,报错也解决了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值