zoukankan      html  css  js  c++  java
  • Asp.Net Core WebAPI入门整理(二)简单示例

    一、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();
    /// <summary>
    /// 获取列表
    /// </summary>
    /// <returns></returns>
    [HttpGet]
    public IEnumerable<Menu> Get()
    {
        List<Menu> list = _Context.Menu.ToList();
        return list;
    }
    /// <summary>
    /// 添加模块对象
    /// </summary>
    /// <param name="m"></param>
    /// <returns></returns>
    [HttpPost]
    public bool Add(Model m)
    {
        try
        {
            m.AddTime = DateTime.Now;
            _Context.Model.Add(m);
            _Context.SaveChanges();
            return true;
        }
        catch (Exception ex)
        {
            return false;
        }
    }
    /// <summary>
    /// 修改模块
    /// </summary>
    /// <param name="m"></param>
    /// <returns></returns>
    [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;
        }
    }
    /// <summary>
    /// 修改菜单对象
    /// </summary>
    /// <param name="m"></param>
    /// <returns></returns>
    [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);
        }
    }
    /// <summary>
    /// 删除模块
    /// </summary>
    /// <param name="ids"></param>
    /// <returns></returns>
    [HttpDelete]
    public IActionResult Delete(string ids)
    {
        try
        {
            if (string.IsNullOrEmpty(ids))
                throw new Exception("获取id参数失败");
            List<int> idList = ids.Split(',').Select(q => Convert.ToInt32(q)).ToList();
            List<Model> 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<Model> 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);
                })
            }
        }
    });

    更多参考:

    Asp.Net Core WebAPI入门整理(一)

    Asp.Net Core中Json序列化处理整理

    .NetCore中EFCore的使用整理(二)-关联表查询

  • 相关阅读:
    python中Cmap的用法
    Js中 关于top、clientTop、scrollTop、offsetTop
    通过ByteArray来播放MP3
    JS中的call()和apply()方法
    flash 屏幕更新 Essential.ActionScript
    Aptana Studio 3 如何汉化,实现简体中文版
    Flash Builder更新Flash player版本
    随机不重复
    Aptana :调试 javascript 图解
    获取两个数组的相同元素或不相同的元素
  • 原文地址:https://www.cnblogs.com/tianma3798/p/6920638.html
Copyright © 2011-2022 走看看