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的使用整理(二)-关联表查询

posted @ 2017-05-30 16:11  天马3798  阅读(36366)  评论(3编辑  收藏  举报