一、Core WebAPI中的序列化
使用的是Newtonsoft.Json,自定义全局配置处理:
// This method gets called by the runtime. Use this method to add services to the container.public void ConfigureServices(IServiceCollection services){ //使用IMvcBuilder 配置Json序列化处理 services.AddMvc() .AddJsonOptions(options => { options.SerializerSettings.ContractResolver = new DefaultContractResolver(); options.SerializerSettings.DateFormatString = "yyyy-MM-dd"; });}
二、Core WebAPI中的路由处理使用方法注释的方式处理,
控制器路由:[Route("api/Menu")]
Action路由:1.根据HttpMethod路由 [HttpPut] 2.根据Template模板路由[HttpGet("{id}")]
Core WebAPI中返回数据处理,提供了更 多的选择:
1.OKResult,OkObjectResult,返回状态为200
注:用OkObjectResult 前台jquery自动解析为object对象,不需要进行反序列化处理
2.ContentResult 返回字符串
3.JsonResult 返回Json对象,前台不需要反序列化处理
4.返回基础类型和引用类型 ,自动序列化,前台接收为object对象等
三 、根据HttpMethod路由示例
1.API定义
/* * API 定义如下 * GET api/menu 获取菜单列表 * POST api/menu 添加模块 * PUT api/menu 修改模块 * PATCH api/menu 修改菜单信息 * DELETE api/menu 删除模块 */
2.后台代码 :
MenuModelContext _Context = new MenuModelContext();////// 获取列表/// ///[HttpGet]public IEnumerable
3.jQuery ajax代码
//Get获取列表数据function testOne() { $.get(urlHelper.getApi('menu'), {}, function (data) { console.info(data); var menu1 = new Vue({ el: '#menu1', data: { result: data } }); })}testOne();//添加菜单var example2 = new Vue({ el: '#example-2', data: { name:'添加菜单' }, //在 methods 对象中定义方法 methods: { addMenu: function (event) { //使用 Post提交添加菜单 var _this = this; this.name = '正在提交...'; $.post(urlHelper.getApi('menu'), { ModelName: '测试菜单5', SortNumber:5 }, function (data) { console.info(data); _this.name = '提交成功'; }); }, updateModel: function (event) { //使用put提交修改模块 var _this = this; $.ajax({ url: urlHelper.getApi('menu'), type: 'put', data: { ModelId: '4', ModelName: '模块abc', SortNumber: 4 }, success: function (data) { console.info(data); if (data == true) alert('修改成功'); else alert('修改失败'); } }); } }});//修改菜单、删除模块var btngroup1 = new Vue({ el: '#btngroup1', data: { name: '修改菜单', name1: '删除模块' }, methods: { updateMenu: function (e) { var _this = this; //使用patch 方式修改菜单 $.ajax({ url: urlHelper.getApi('menu'), type:'patch', data: { MenuID: 1, MenuName: '测试菜单One', SortNumber: 100, ModelID:2 }, success: function (data) { console.info(data); } }); }, deleteMenu: function (e) { //使用delete 提交方式删除模块 $.ajax({ url: urlHelper.getApi('menu'), type: 'delete', data: { ids:[1003] }, success: function (data) { console.info(data); }, error: function (data) { console.info(data); } }); } }});
四、根据HttpMethod的Template路由示例
1.API定义
/** API 定义* GET api/menu/{id} 获取指定ID的菜单对象* GET api/menu/getmodel 获取模块列表内容*/
2.后台代码:
[HttpGet("{id}")]public IActionResult Get(int ID){ Menu m = _Context.Menu.Find(ID); if (m == null) return NotFound(); return Json(m);}//特别说明:路由中的Template的值不可以包含斜杠/[HttpGet("getmodel")] public IActionResult GetModel(){ Listlist = _Context.Model.ToList(); return Json(list);}
3.Jquery 的ajax代码
//其他Get方式测试var btngroup2 = new Vue({ el: '#btngroup2', data: { name: '获取菜单对象', name1: '获取模块列表', item: {} //Vue的对象绑定,没有的情况下需要一个空对象,不然报错 }, methods: { getMenu: function (e) { var _this = this; //链接地址格式 :http://localhost:50000/api/menu/1/ $.get(urlHelper.getApi('menu','1'), { }, function (data) { console.info(data); _this.item = data; }); }, getModel: function (e) { var _this = this; $.get(urlHelper.getApi('menu', 'getmodel'), {}, function (data) { console.info(data); }) } }});
更多参考: