Fork me on Github

WPF请求WebAPI

一、请求模型

   /// <summary>
   /// 请求模型
   /// </summary>
   public class ApiRequest
   {
       /// <summary>
       /// 请求路由
       /// </summary>
       public string Route { get; set; }

       /// <summary>
       /// 请求方式(get/post/put/delete)
       /// </summary>
       public Method   Method { get; set; }

       /// <summary>
       /// 请求参数
       /// </summary>
       public object Parameter { get; set; }

       /// <summary>
       /// 发送的数据类型
       /// </summary>
       public string ContentType { get; set; } = "application/json";
   }

二、接收模型

   /// <summary>
   /// 接收模型
   /// </summary>
   public class ApiResponse
   {
       /// <summary>
       /// 结果编码
       /// </summary>
       public int Code { get; set; }

       /// <summary>
       /// 结果信息
       /// </summary>
       public string Message { get; set; }

       /// <summary>
       /// 返回数据
       /// </summary>
       public object ResultData { get; set; }
   }

三、API请求工具类

   /// <summary>
   /// API请求工具类
   /// </summary>
   public class HttpRestClient
   {
       //客户端
       private readonly Dictionary<string, RestClient> _clients;

       //请求地址
       private readonly string BaseUrl = "http://localhost:10294/api/";

       public HttpRestClient()
       {
           _clients = new Dictionary<string, RestClient>();
       }

       public RestClient GetClient(string url)
       {
           if (!_clients.TryGetValue(url, out RestClient client))
           {
               client = new RestClient(url);
               _clients.Add(url, client);
           }
           return client;
       }

       public ApiResponse Excute(ApiRequest apiRequest)
       {
           //请求方式
           RestRequest request = new RestRequest(string.Empty, apiRequest.Method);
           //内容类型
           request.AddHeader("Content-Type", apiRequest.ContentType);
           //请求参数
           if (apiRequest.Parameter != null)
           {
               //JsonConvert.SerializeObject 序列化
               request.AddParameter(apiRequest.ContentType, JsonConvert.SerializeObject(apiRequest.Parameter), ParameterType.RequestBody);
               //request.AddBody(JsonConvert.SerializeObject(apiRequest.Parameter)); //作用同上
           }

           //获取客户端
           var client = GetClient(BaseUrl + apiRequest.Route);
           //请求
           var res = client.Execute(request);
           //请求成功
           if (res.StatusCode == System.Net.HttpStatusCode.OK)
           {
               //JsonConvert.DeserializeObject 反序列化
               return JsonConvert.DeserializeObject<ApiResponse>(res.Content);
           }
           else
           {
               return new ApiResponse() { Code = -99, Message = "服务器繁忙,请稍后" };
           }

       }
   }

四、Prism注入API请求工具类

1.App.xaml.cs 注入

    protected override void RegisterTypes(IContainerRegistry containerRegistry)
    {
        //API请求工具类注入
        containerRegistry.GetContainer().Register<HttpRestClient>(made: Parameters.Of.Type<string>(serviceKey: "webUrl"));
    }

2.ViewModel 实例化调用

    HttpRestClient client;

    public MainViewModel(HttpRestClient _client)
    {
        client = _client;
    }
    ApiRequest request = new ApiRequest();
    request.Method = RestSharp.Method.Post;
    request.Parameter = parameter;
    request.Route = "[control]/[action]";
    var res = client.Excute(request); 
    if (res.Code == 0)
    {
       MessageBox.Show(res.Message);
       return;
    }
    else
    {
       MessageBox.Show(res.Message);
       return;
    }   

 

posted @ 2025-05-20 16:26  昂昂呀  阅读(87)  评论(0)    收藏  举报