一、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. Spring之事务操作(配置文件)

    UserDao.java package helloworld.tx; import org.springframework.jdbc.core.JdbcTemplate; public class ...

  2. 学习Spring Boot:(十)使用hibernate validation完成数据后端校验

    前言 后台数据的校验也是开发中比较注重的一点,用来校验数据的正确性,以免一些非法的数据破坏系统,或者进入数据库,造成数据污染,由于数据检验可能应用到很多层面,所以系统对数据校验要求比较严格且追求可变性 ...

  3. Win32+API学习笔记:创建基本的窗口控件

    创建一个标签 CreateWindowEx(0, "static", "姓名:",                                        ...

  4. 小朋友学Linux<一>基础篇

    Linux最基础之<小朋友也能学会Linux>... 1.Linux 知识积累: Linux 英文解释为 Linux is not Unix.学习Linux必须要熟练使用的操作系统是Cen ...

  5. 第一次使用 markdown 写博客

    Web前端 js 框架(四选一) 有可能的话,学 Vue.js ,React.js ,Angular.js,Awrelia css 学习 Sass 学会 css 的可编程 HTML5 详细语法 Nod ...

  6. LVS原理详解(3种工作模式及8种调度算法)

    2017年1月12日, 星期四 LVS原理详解(3种工作模式及8种调度算法)   LVS原理详解及部署之二:LVS原理详解(3种工作方式8种调度算法) 作者:woshiliwentong  发布日期: ...

  7. 【整理】HTML5游戏开发学习笔记(3)- 抛物线运动

    1.预备知识(1)Canvas旋转的实现过程 window.onload = function(){ var ctx = document.getElementById('canvas1').getC ...

  8. Unable to Distribute in Xcode5?

    Blog Unable to Distribute in Xcode5? I have the  question, if this screenshot is what you getting. ( ...

  9. 各种卷积类型Convolution

    从最开始的卷积层,发展至今,卷积已不再是当初的卷积,而是一个研究方向.在反卷积这篇博客中,介绍了一些常见的卷积的关系,本篇博客就是要梳理这些有趣的卷积结构. 阅读本篇博客之前,建议将这篇博客结合在一起 ...

  10. Requests中出现大量ASYNC_NETWORK_IO等待

    七夕活动,网页显示异常:504 Gateway Time-out The server didn't respond in time.开发询问数据库是否正常,当时正连接在实例上查询数据,感觉响应确实慢 ...