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) { //反序列化json LoginAccountDTO 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); } }