博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Asp.Net Core WebAPI入门整理(二)简单示例
阅读量:6973 次
发布时间:2019-06-27

本文共 6634 字,大约阅读时间需要 22 分钟。

一、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
Get(){ List
list = _Context.Menu.ToList(); return list;}///
/// 添加模块对象/// ///
///
[HttpPost]public bool Add(Model m){ try { m.AddTime = DateTime.Now; _Context.Model.Add(m); _Context.SaveChanges(); return true; } catch (Exception ex) { return false; }}///
/// 修改模块/// ///
///
[HttpPut]public bool Update(Model m){ try { Model oldModel = _Context.Model.Find(m.ModelId); oldModel.ModelName = m.ModelName; oldModel.SortNumber = m.SortNumber; _Context.SaveChanges(); return true; } catch (Exception ex) { return false; }}///
/// 修改菜单对象/// ///
///
[HttpPatch]public IActionResult Update(Menu m){ try { Menu oldMenu = _Context.Menu.Find(m.MenuId); if (oldMenu == null) return NotFound("你要访问的菜单不存在或已经删除"); oldMenu.MenuName = m.MenuName; oldMenu.SortNumber = m.SortNumber; oldMenu.ModelId = m.ModelId; _Context.SaveChanges(); return Ok(); } catch (Exception ex) { return Content(ex.Message); }}///
/// 删除模块/// ///
///
[HttpDelete]public IActionResult Delete(string ids){ try { if (string.IsNullOrEmpty(ids)) throw new Exception("获取id参数失败"); List
idList = ids.Split(',').Select(q => Convert.ToInt32(q)).ToList(); List
list = _Context.Model.Where(q => idList.Contains(q.ModelId)).ToList(); _Context.Model.RemoveRange(list); int count = _Context.SaveChanges(); //使用OkObjectResult 前台jquery自动解析为object对象,不需要进行反序列化处理 //返回的不是字符串 return Ok(new { msg = $"删除成功,总共删除{count}条数据" }); } catch (Exception ex) { //使用ContentResult返回字符串处理 return Content(ex.Message); }}
View Code

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);                }            });        }    }});
View Code

四、根据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(){    List
list = _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);            })        }    }});

更多参考:

转载地址:http://mvesl.baihongyu.com/

你可能感兴趣的文章
数据结构与算法-day6-跳表
查看>>
JVM学习笔记——程序计数器
查看>>
【国际IT专场】每个程序猿必须且一定要懂的“数据库索引
查看>>
正则表达式基本用法
查看>>
JS中的继承模式
查看>>
生命周期组件 Lifecycle 源码解析(一)
查看>>
TNW-获取微信公众号的 access_token
查看>>
广州,后会有期
查看>>
谈谈关于 iOS 的架构以及应用
查看>>
ElasticSearch 学习总结
查看>>
【Nodejs学习之旅·1-1】为何选择Nodejs
查看>>
Docker安装
查看>>
很简单的next.js数据获取规范
查看>>
String方法小总结
查看>>
Vue 使用篇(二):Vue父子组件间的数据传输
查看>>
区块链技术融合云计算是如何引领未来新趋势
查看>>
关于Flutter 您必须知道的知识点!!!
查看>>
微服务间的调用和应用内调用有啥区别
查看>>
iOS二进制和资源包的自检
查看>>
20-多态
查看>>