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

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

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

    一.Core  WebAPI中的跨域处理  1.在使用WebAPI项目的时候基本上都会用到跨域处理 2.Core WebAPI的项目中自带了跨域Cors的处理,不需要单独添加程序包 3.使用方法简单 ...

  2. Asp.Net Core WebAPI入门整理(四)参数获取

    一.总结整理,本实例对应.Net Core 2.0版本 1.在.Net Core WebAPI 中对于参数的获取及自动赋值,沿用了Asp.Net  MVC的有点,既可以单个指定多个参数,右可以指定Mo ...

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

    一.Asp.Net Core  WebAPI 1.目前版本是v1.1 2.默认路由处理和Asp.Net WebAPI有些 区别了,现在使用的是控制器路由[Route("api/Menu&qu ...

  4. ASP.NET Core WebAPI帮助页--Swagger简单使用1.0

    1.什么是Swagger? Swagger是一个规范且完整的框架,提供描述.生产.消费和可视化RESTful API,它是为了解决Web API生成有用文档和帮助页的问题.   2.为啥选用swagg ...

  5. 在 ASP.NET Core 中使用 ApplicationPart 的简单示例

    1. 项目截图: 2. 代码 <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFra ...

  6. asp.net core WebAPI学习以及 发布(***入门学习)

    A asp.net Core 系列[一]——创建Web应用 asp.net Core 系列[二]—— 使用 ASP.NET Core 和 VS2017 for Windows 创建 Web API a ...

  7. ASP.NET Core WebApi构建API接口服务实战演练

    一.ASP.NET Core WebApi课程介绍 人生苦短,我用.NET Core!提到Api接口,一般会想到以前用到的WebService和WCF服务,这三个技术都是用来创建服务接口,只不过Web ...

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

    Asp.Net Core WebApi学习笔记(四)-- Middleware 本文记录了Asp.Net管道模型和Asp.Net Core的Middleware模型的对比,并在上一篇的基础上增加Mid ...

  9. 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. Java之工具类:判断对象是否为空或null

    import java.lang.reflect.Array; import java.util.Collection; import java.util.Map; /** * 判断对象是否为空或nu ...

  2. poj2082 Terrible Sets(单调栈)

    Description Let N be the set of all natural numbers {0 , 1 , 2 , . . . }, and R be the set of all re ...

  3. pgm7

    和 Koller 的 video 最大的不同莫过于书上讲 LBP 的角度不是 procedural 的,而是原理性的.我们先看个 procedural 的,在一般的 cluster graph 上的 ...

  4. The writing on the wall 南京网络赛2018B题

    样例输入复制 2 3 3 0 3 3 1 2 2 样例输出复制 Case #1: 36 Case #2: 20 题目来源 ACM-ICPC 2018 南京赛区网络预赛 题意: 就是求图中去掉涂黑的方格 ...

  5. hihoCoder 1632 Secret Poems(ACM-ICPC北京赛区2017网络同步赛)

    时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 The Yongzheng Emperor (13 December 1678 – 8 October 1735), was ...

  6. 【刷题】LOJ 2818 「eJOI2018」循环排序

    题目描述 本题译自 eJOI2018 Problem F「Cycle Sort」 给定一个长为 \(n\) 的数列 \(\{a_i\}\) ,你可以多次进行如下操作: 选定 \(k\) 个不同的下标 ...

  7. 洛谷4859 BZOJ3622 已经没什么好害怕的了(DP,二项式反演)

    题目链接: 洛谷 BZOJ 题目大意:有两个长为 $n$ 的序列 $a,b$,问有多少种重排 $b$ 的方式,使得满足 $a_i>b_i$ 的 $i$ 的个数比满足 $a_i<b_i$ 的 ...

  8. 【bzoj4765】 普通计算姬

    题意 给出一棵有根树,$n$个点每个都有一个点权.$m$组操作每次可以修改一个点权或者询问编号在区间$[l,r]$的点的子树权值和的和. Solution 我们对节点编号分块,每一块统计该块中的节点的 ...

  9. 【51nod1073】约瑟夫环1

    题目大意:给定 \(N\) 个人围成一个圈,每隔 \(M\) 个人杀一个,求最后活着的人的编号. 题解:环会涉及模运算,所以先将 \(1 \rightarrow N\) 映射为 \(0 \righta ...

  10. python---django中form组件(2)自定制属性以及表单的各种验证,以及数据源的实时更新,以及和数据库关联使用ModelForm和元类

    自定义属性以及各种验证 分析widget: class TestForm(forms.Form): user = fields.CharField( required = True, widget = ...