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; }

                
            
        
浙公网安备 33010602011771号