当前位置: 首页 > news >正文

汶上网站建设多少钱山东网站建设平台

汶上网站建设多少钱,山东网站建设平台,绍兴网站建设哪家好,烟台seo网站诊断客户端使用RestSharp库调用WebApi 动态加载数据 在MyDoTo客户端中#xff0c;使用NuGet 安装两个库 RestSharp Newtonsoft.Json 一. RestSharp 简单的使用测试例子 当前章节主要目的是#xff1a;对RestSharp 库#xff0c;根据项目需求再次进行封装。下面先做个简单的使用…客户端使用RestSharp库调用WebApi 动态加载数据 在MyDoTo客户端中使用NuGet 安装两个库 RestSharp Newtonsoft.Json  一. RestSharp 简单的使用测试例子 当前章节主要目的是对RestSharp 库根据项目需求再次进行封装。下面先做个简单的使用测试例子。 1.首先运行WebApi 项目获取Memo 单条数据 请求成功后可以看到请求的URL和返回的Response body响应内容 2.在MyToDo客户端的 MemoViewModel中 CreateMemoList 方法加载数据时进行以下修改测试 var client new RestSharp.RestClient(http://localhost:5143); var requestGet new RestRequest(api/Memo/Get,Method.Get); requestGet.AddParameter(id,2); var response client.Execute(requestGet); var con response.Content; 如果需要解析拿到的具体对象数据需对结果进行 JsonConvert.DeserializeObject 反序列化。具体的解析步骤就是 拿到对象数据把JSON 生成C# 实体类。进行反序列化的时候把当前数据实体类传进去就OK了。 3.先把WebApi项目已经启动后再选择 MyToDo 客户端项目右键启动一个新实例 或者右键解决方案》属性配置多个启动项目 4.最后在MyToDo客户端打断点调试。运行起来后命中断点可以看到请求的接口有数据返回了 基本的简单使用就是这样。在RestSharp 官网 有各种使用实例复杂的涉到Token 身份认证等都有。 二.对 RestSharp 进行封装使用集成到客户端中 新建一个服务层文件夹Service用于存放封装对WebApi 接口的访问等处理逻辑 1. 首先把 ApiResponse 共用类移到MyToDo.Shared 中并且再添加请求结果泛型的ApiResponse 类 public class ApiResponse{/// summary/// 失败/// /summary/// param namemessage/param/// param namestatus/parampublic ApiResponse(string message, bool status false){ this.Message message;this.Status status;}/// summary/// 成功/// /summary/// param namestatus/param/// param nameresult/parampublic ApiResponse(bool status,object result) {this.Status status;this.Result result;}/// summary/// 返回消息/// /summarypublic string Message { get; set; }/// summary/// 返回状态/// /summarypublic bool Status { get; set; }/// summary/// 结果/// /summarypublic object Result { get; set; }}public class ApiResponseT{/// summary/// 返回消息/// /summarypublic string Message { get; set; }/// summary/// 返回状态/// /summarypublic bool Status { get; set; }/// summary/// 结果/// /summarypublic T Result { get; set; }} 且MyToDo 客户端要引用MyToDo.Shared 项目。 2. 在 MyToDo 项目Service 文件夹中封装一个通用的请求类型类BaseRequest主要用于构造请求接口的时候传递的参数。 public class BaseRequest{/// summary/// 请求类型/// /summarypublic Method Method { get; set; }/// summary/// 路由也就是Url/// /summarypublic string Route { get; set; }/// summary/// 数据类型描述/// /summarypublic string ContentType { get; set; } application/json;/// summary/// 请求参数/// /summarypublic object Paramenter { get; set; }} 3.同样接着再封装一个访问WebApi 的共用类HttpRestClient public class HttpRestClient {private readonly string apiUrl;protected readonly RestClient clinet;public HttpRestClient(string apiUrl) {this.apiUrl apiUrl;clinet new RestClient(apiUrl);}//通用请求public async TaskApiResponse ExecuteAsync(BaseRequest baseRequest){var request new RestRequest(baseRequest.Route, baseRequest.Method);//添加请求头request.AddHeader(Content-Type, baseRequest.ContentType);//添加请求参数if (baseRequest.Paramenter ! null){//把请求参数进行序列化后添加进来。并且设置序列化的类型request.AddParameter(param,JsonConvert.SerializeObject(baseRequest.Paramenter),ParameterType.RequestBody);}var responseawait clinet.ExecuteAsync(request);//把结果进行反序列化后返回出去return JsonConvert.DeserializeObjectApiResponse(response.Content);}//通用带泛型请求public async TaskApiResponseT ExecuteAsyncT(BaseRequest baseRequest){var request new RestRequest(baseRequest.Route, baseRequest.Method);//添加请求头request.AddHeader(Content-Type, baseRequest.ContentType);//添加请求参数if (baseRequest.Paramenter ! null){//把请求参数进行序列化后添加进来。并且设置序列化的类型request.AddParameter(param, JsonConvert.SerializeObject(baseRequest.Paramenter), ParameterType.RequestBody);}var response await clinet.ExecuteAsync(request);//把结果进行反序列化后返回出去return JsonConvert.DeserializeObjectApiResponseT(response.Content);} } 4.创建通用的请求服务类IBaseService public interface IBaseServiceTEntity where TEntity : class{//添加TaskApiResponseTEntity AddAsync(TEntity entity);//更新TaskApiResponseTEntity UpdateAsync(TEntity entity);//删除TaskApiResponse DeleteAsync(int id);//根据id取第一条数据TaskApiResponseTEntity GetFirstOfDefaultAsync(int id);//获取所有数据TaskApiResponsePagedListTEntity GetAllAsync(QueryParameter parameter);} 5. 实现BaseService通用服务类。继承 IBaseService public class BaseServiceTEntity : IBaseServiceTEntity where TEntity : class{private readonly HttpRestClient client;private readonly string serverName;public BaseService(HttpRestClient client,string serverName){this.client client;this.serverName serverName;}public async TaskApiResponseTEntity AddAsync(TEntity entity){var request new BaseRequest() {Method Method.Post,Route$api/{serverName}/Add,Paramenterentity};return await client.ExecuteAsyncTEntity(request);}public async TaskApiResponse DeleteAsync(int id){var request new BaseRequest(){Method Method.Delete,Route $api/{serverName}/Delete?id{id}};return await client.ExecuteAsync(request);}public async TaskApiResponsePagedListTEntity GetAllAsync(QueryParameter parameter){var request new BaseRequest(){Method Method.Get,Route $api/{serverName}/GetAll?pageIndex{parameter.PageIndex}pageSize{parameter.PageSize}Search{parameter.Search}};return await client.ExecuteAsyncPagedListTEntity (request);}public async TaskApiResponseTEntity GetFirstOfDefaultAsync(int id){var request new BaseRequest(){Method Method.Delete,Route $api/{serverName}/Get?id{id}};return await client.ExecuteAsyncTEntity(request);}public async TaskApiResponseTEntity UpdateAsync(TEntity entity){var request new BaseRequest(){Method Method.Post,Route $api/{serverName}/Update,Paramenter entity};return await client.ExecuteAsyncTEntity(request);}} 三.待办事项调用WebApi服务接口获取数据 1.首先创建待办事项服务接口类 IToDoService 继承IBaseService 基类 public interface IToDoService:IBaseServiceToDoDto{} 2.接着要实现待办事项服务接口类ToDoService。继承BaseService和IToDoService  public class ToDoService : BaseServiceToDoDto, IToDoService{/// summary/// 构造中直接传控制器名称进去。因为在Web Api项目中待办事项控制器的名称就是叫ToDo/// /summary/// param nameclient/param/// param nameserverName/parampublic ToDoService(HttpRestClient client, string serverName ToDo) : base(client, serverName){}} 3.然后还需要在 App.xaml.cs 中进行依赖注入 /// summary/// Interaction logic for App.xaml/// /summarypublic partial class App : PrismApplication{/// summary/// 创建启动页面/// /summary/// returns/returnsprotected override Window CreateShell(){return Container.ResolveMainView();}/// summary/// 依懒注入的方法/// /summary/// param namecontainerRegistry/paramprotected override void RegisterTypes(IContainerRegistry containerRegistry){//对封装的http请求类进行注入。并且设置一个默认参数containerRegistry.GetContainer().RegisterHttpRestClient(made:Parameters.Of.Typestring(serviceKey:webUrl));//注册默认的服务地址containerRegistry.GetContainer().RegisterInstance(http://localhost:5143/,serviceKey: webUrl);//注册服务containerRegistry.RegisterIToDoService, ToDoService();containerRegistry.RegisterForNavigationAboutView();containerRegistry.RegisterForNavigationSkinView, SkinViewModel();containerRegistry.RegisterForNavigationIndexView, IndexViewModel();containerRegistry.RegisterForNavigationMemoView, MemoViewModel();containerRegistry.RegisterForNavigationToDoView, ToDoViewModel();containerRegistry.RegisterForNavigationSettingsView, SettingsViewModel();}} 4.最后在ViewModels 中去使用 待办事项接口服务IToDoService  public class ToDoViewModel:BindableBase{public ToDoViewModel(IToDoService toDoService){ToDoDtos new ObservableCollectionToDoDto();AddCommand new DelegateCommand(Add);this.toDoService toDoService;CreateTodoList();}private bool isRightDrawerOpen;/// summary/// 右侧编辑窗口是否展开/// /summarypublic bool IsRightDrawerOpen{get { return isRightDrawerOpen; }set { isRightDrawerOpen value; RaisePropertyChanged(); }}public DelegateCommand AddCommand{ get; private set; }private ObservableCollectionToDoDto toDoDtos;private readonly IToDoService toDoService;/// summary/// 创建数据的动态集合/// /summarypublic ObservableCollectionToDoDto ToDoDtos{get { return toDoDtos; }set { toDoDtos value;RaisePropertyChanged(); }}async void CreateTodoList(){//添加查询条件var todoResultawait toDoService.GetAllAsync(new Shared.Parameters.QueryParameter(){PageIndex 0,PageSize 100,});if (todoResult.Status){toDoDtos.Clear();foreach (var item in todoResult.Result.Items){toDoDtos.Add(item);}}//for (int i 0; i 20; i)//{// toDoDtos.Add(new ToDoDto()// {// Title标题i,// Content测试数据...// });//}}/// summary/// 添加待办/// /summary/// exception crefNotImplementedException/exceptionprivate void Add(){IsRightDrawerOpentrue;}} 四.代码结构
http://www.dnsts.com.cn/news/66220.html

相关文章:

  • 优化官方网站设计靖江 建设局网站
  • app和手机网站工程建设项目招标范围和规模标准规定
  • 架设网站需要什么欧阳网站建设
  • python php 做网站在线图片编辑器手机版
  • 哪里做网站的比较多wordpress关键词描述
  • 网上网站建设教程李贤威wordpress建站教程
  • 建设银官方网站白帽seo是什么职业
  • 建阳建设局网站网站建设学多长时间
  • 网站建设阿胶膏的作用网站利用百度离线地图
  • 做网站是如果盈利的湖北省建设工程网站
  • iis网站没有属性宁波建设工程信息网
  • 自己怎样建网站如何提高自己的营销能力
  • 建站培训班做兼职去什么网站
  • 安卓开发软件seo都用在哪些网站
  • 网站建设程序员做什么网站设计费报价表
  • 网站怎么做优化做一个展示型网站多少钱
  • 较好网站建设公司做移动网站优化排名首页
  • vR网站建设程序建网页的软件
  • 做企业网站找哪家大理建设工程信息网站
  • 烟台海阳市专业做网站网站建设方案 报价
  • 哪些平台制作网站网站建设的大功效
  • 静安做网站的公司app推广方案
  • 如何给网站做防盗链丽水网站建设微信推广
  • 网站建设服务采购方案后端开发是干什么的
  • 东莞效果好的营销型网站建设怎么随便搞个网站
  • wordpress固定链接设置以后404东莞公司seo优化
  • js建设网站外网赣州北京网站建设
  • 怎么寻求网站建设如何搭建aspx网站
  • 芜湖网站优化公司口碑好的做网站公司
  • 天津定制开发网站网站建设需要的软件