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

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

时间: 2024-10-14 08:54:44

Asp.Net Core WebAPI入门整理(二)简单示例的相关文章

Asp.Net Core WebAPI入门整理(三)跨域处理

一.Core  WebAPI中的跨域处理  1.在使用WebAPI项目的时候基本上都会用到跨域处理 2.Core WebAPI的项目中自带了跨域Cors的处理,不需要单独添加程序包 3.使用方法简单 二.使用实例 1.全局配置中启用跨域处理,命名为'any',任何都可以访问 public void ConfigureServices(IServiceCollection services) { //配置跨域处理 services.AddCors(options => { options.AddP

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

一.Asp.Net Core  WebAPI 1.目前版本是v1.1 2.默认路由处理和Asp.Net WebAPI有些 区别了,现在使用的是控制器路由[Route("api/Menu")]和请求方式路由[HttpGet].[HttpGet("{id}")]结合的 方式.直接在控制器和Action上使用方法注释. 3.从项目结构依赖上看 Asp.Net Core MVC项目其实已经包含了WebAPI 二.使用Visual Studio 2017创建Asp.Net C

【ASP.NET Core快速入门】(二)部署到IIS

原文:[ASP.NET Core快速入门](二)部署到IIS 配置IIS模块 ASP.NET Core Module载地址:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/aspnet-core-module?tabs=aspnetcore2x 安装后再IIS管理器模块页面会出现aspnetcoremodule 新建网站 修改应用池 网站发布 控制台方式 dotnet publish发布到项目文件的bin/deb

Asp.Net Core WebApi学习笔记(四)-- Middleware

Asp.Net Core WebApi学习笔记(四)-- Middleware 本文记录了Asp.Net管道模型和Asp.Net Core的Middleware模型的对比,并在上一篇的基础上增加Middleware功能支持. 在演示Middleware功能之前,先要了解一下Asp.Net管道模型发生了什么样的变化. 第一部分:管道模型 1. Asp.Net管道 在之前的Asp.Net里,主要的管道模型流程如下图所示: 请求进入Asp.Net工作进程后,由进程创建HttpWorkRequest对象

005.Getting started with ASP.NET Core MVC and Visual Studio -- 【VS开发asp.net core mvc 入门】

Getting started with ASP.NET Core MVC and Visual Studio VS开发asp.net core mvc 入门 2017-3-7 2 分钟阅读时长 本文内容 1.Install Visual Studio and .NET Core 安装 VS 与 .NET Core 2.Create a web app 创建一个 web 应用 By Rick Anderson This tutorial will teach you the basics of

ASP.Net Core WebApi几种版本控制对比

原文:ASP.Net Core WebApi几种版本控制对比 一.版本控制的好处: (1)有助于及时推出功能, 而不会破坏现有系统. (2)它还可以帮助为选定的客户提供额外的功能. API 版本控制可以采用不同的方式进行控制,方法如下: (1)在 URL 中追加版本或作为查询字符串参数, (2)通过自定义标头和通过接受标头 在这篇文章中, 让我们来看看如何支持多个版本的 ASP.NET  Core  Web API. 一.创建asp.net core webapi 项目,引用NuGet包:Ins

asp.net core webapi/website+Azure DevOps+GitHub+Docker

asp.net core webapi/website+Azure DevOps+GitHub+Docker 新春开篇作,主要写一下关于asp.net core web/api 2.2 项目借助devops和github实现CI 项目源码在GitHub里,点击这里获取 下面是录了一些视频,视频全部在B站,做了一下简单的介绍 asp.net core webapi 单元测试控制器(一) 点击这里浏览 asp.net core webapi 单元测试控制器(二) 点击这里浏览 asp.net cor

Asp.net core WebApi 使用Swagger生成帮助页实例

最近我们团队一直进行.net core的转型,web开发向着前后端分离的技术架构演进,我们后台主要是采用了asp.net core webapi来进行开发,开始每次调试以及与前端人员的沟通上都存在这效率低下的问题,一次在看微软asp.net core官方文档的时候,发现了swagger这个好东西.然后在实际的项目中引入了该技术.我们开发人员测试自己写的api的过程大大得到了简化,前端人员也可以根据我们提供的swagger help pages 自己进行一些前端代码的测试,大大提高了前后端的开发效

Asp.net core WebApi 使用Swagger生成帮助页

最近我们团队一直进行.net core的转型,web开发向着前后端分离的技术架构演进,我们后台主要是采用了asp.net core webapi来进行开发,开始每次调试以及与前端人员的沟通上都存在这效率低下的问题,一次在看微软asp.net core官方文档的时候,发现了swagger这个好东西.然后在实际的项目中引入了该技术.我们开发人员测试自己写的api的过程大大得到了简化,前端人员也可以根据我们提供的swagger help pages 自己进行一些前端代码的测试,大大提高了前后端的开发效