1.下载RestSharp和Newtonsoft.Json
2编写ApiRequest和ApiResponse和调用工具类HttpRestClient
请求模型
/// <summary>/// 请求模型/// </summary>public class ApiRequest{/// <summary>/// 请求地址/api路由地址/// </summary>public string Route { get; set; }/// <summary>/// 请求方式(Post,Get,Delete,Put)/// </summary>public Method Method { get; set; }/// <summary>/// 请求参数/// </summary>public object Parameters { get; set; }/// <summary>/// 发送的数据类型(默认是json)/// </summary>public string ContentType { get; set; } = "application/json";}
接收模型
/// <summary>/// 接收模型/// </summary>public class ApiResponse{/// <summary>/// 结果编码/// </summary>public int ResultCode { get; set; }/// <summary>/// 结果信息/// </summary>public string Msg { get; set; }/// <summary>/// 数据/// </summary>public object ResultData { get; set; }}
http调用工具类,要对应后端接口把baseUrl替换掉
/// <summary>/// 调用api工具类/// </summary>public class HttpRestClient{private readonly RestClient Client;private readonly string baseUrl = "http://localhost:10036/api/";public HttpRestClient(){Client = new RestClient();}/// <summary>/// 请求/// </summary>/// <param name="request">请求数据</param>/// <returns>接收数据</returns>public ApiResponse Execute(ApiRequest apiRequest){//请求方式RestRequest request = new RestRequest(apiRequest.Method);//请求内容request.AddHeader("Content-Type", apiRequest.ContentType);if (apiRequest.Parameters != null){request.AddParameter("param",JsonConvert.SerializeObject(apiRequest.Parameters),ParameterType.RequestBody);}//请求地址Client.BaseUrl = new Uri(baseUrl + apiRequest.Route);var res=Client.Execute(request);//请求成功if (res.StatusCode == System.Net.HttpStatusCode.OK){//把json格式反序列化成对象return JsonConvert.DeserializeObject<ApiResponse>(res.Content);}//失败else{return new ApiResponse { ResultCode = -99, Msg = "服务器忙,请稍后" };}}}
3.Prism依赖注入HttpRestClient
public partial class App : PrismApplication{protected override Window CreateShell(){//设置启动页return Container.Resolve<MainWin>();}/// <summary>/// 依赖注入/// </summary>/// <param name="containerRegistry"></param>protected override void RegisterTypes(IContainerRegistry containerRegistry){containerRegistry.GetContainer().Register<HttpRestClient>(made: Parameters.Of.Type<string>(serviceKey: "webUrl"));}}
4.用一个登录例子说明
private void Login(){if (string.IsNullOrEmpty(LoginAccountDTO.Account) || string.IsNullOrEmpty(LoginAccountDTO.Password)){//MessageBox.Show("账号或密码未输入");aggregator.GetEvent<MsgEvent>().Publish("账号或密码未输入");return;}//创建请求ApiRequest apiRequest = new ApiRequest();apiRequest.Method = RestSharp.Method.GET;LoginAccountDTO.Password=Md5Helper.GetMd5(LoginAccountDTO.Password);apiRequest.Route = $"Account/Login?account={LoginAccountDTO.Account}&password={LoginAccountDTO.Password}";ApiResponse response = httpRestClient.Execute(apiRequest);//登陆成功if (response.ResultCode == 1){//反序列化jsonLoginAccountDTO loginAccountDTO = JsonConvert.DeserializeObject<LoginAccountDTO>(response.ResultData.ToString());DialogParameters parameters = new DialogParameters();parameters.Add("LoginName", loginAccountDTO.Name);RequestClose(new DialogResult(ButtonResult.OK, parameters));}//登陆失败else{//MessageBox.Show(response.Msg);aggregator.GetEvent<MsgEvent>().Publish(response.Msg);}}