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
的,就不需要我做什么了,报错也解决了。