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 WebAPI入门整理(三)跨域处理
一.Core WebAPI中的跨域处理 1.在使用WebAPI项目的时候基本上都会用到跨域处理 2.Core WebAPI的项目中自带了跨域Cors的处理,不需要单独添加程序包 3.使用方法简单 ...
- Asp.Net Core WebAPI入门整理(四)参数获取
一.总结整理,本实例对应.Net Core 2.0版本 1.在.Net Core WebAPI 中对于参数的获取及自动赋值,沿用了Asp.Net MVC的有点,既可以单个指定多个参数,右可以指定Mo ...
- Asp.Net Core WebAPI入门整理(一)
一.Asp.Net Core WebAPI 1.目前版本是v1.1 2.默认路由处理和Asp.Net WebAPI有些 区别了,现在使用的是控制器路由[Route("api/Menu&qu ...
- ASP.NET Core WebAPI帮助页--Swagger简单使用1.0
1.什么是Swagger? Swagger是一个规范且完整的框架,提供描述.生产.消费和可视化RESTful API,它是为了解决Web API生成有用文档和帮助页的问题. 2.为啥选用swagg ...
- 在 ASP.NET Core 中使用 ApplicationPart 的简单示例
1. 项目截图: 2. 代码 <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFra ...
- asp.net core WebAPI学习以及 发布(***入门学习)
A asp.net Core 系列[一]——创建Web应用 asp.net Core 系列[二]—— 使用 ASP.NET Core 和 VS2017 for Windows 创建 Web API a ...
- ASP.NET Core WebApi构建API接口服务实战演练
一.ASP.NET Core WebApi课程介绍 人生苦短,我用.NET Core!提到Api接口,一般会想到以前用到的WebService和WCF服务,这三个技术都是用来创建服务接口,只不过Web ...
- Asp.Net Core WebApi学习笔记(四)-- Middleware
Asp.Net Core WebApi学习笔记(四)-- Middleware 本文记录了Asp.Net管道模型和Asp.Net Core的Middleware模型的对比,并在上一篇的基础上增加Mid ...
- 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 分钟阅读时长 本文 ...
随机推荐
- BZOJ2729 HNOI2012排队(组合数学+高精度)
组合入门题.高精度入门题. #include<iostream> #include<cstdio> #include<cstdlib> #include<cs ...
- sql server 小技巧 集锦
sql server 小技巧(1) 导入csv数据到sql server sql server 小技巧(2) 删除sql server中重复的数据 sql server 小技巧(3) SQL Serv ...
- ssh框架配置过程
1.pom.xml配置依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=&qu ...
- IntelliJ IDEA 创建Java Web项目
1. 创建Web项目 可以先阅读 IntelliJ IDEA 的安装和使用教程 注意:IntelliJ IDEA 中 Project 和 Module 的概念及区别 创建完成后点击Import Cha ...
- 【uoj428】普通的计数题
Portal --> uoj428 Solution 不会胖子的一个log正解qwq只能怂怂滴写分治了qwq 首先就是一个我想不到的转化qwq 我们将第\(i\)次操作加入的数看成一个编 ...
- 错误日志收集sentry的安装与简单使用
通过官方文档https://docs.sentry.io/可以得知,安装服务有两种方式,一种是使用Python,这种方式个人感觉比较麻烦.于是选择了第二种方式:使用docker. 我是在Windows ...
- Java基础-SSM之Spring的AOP编程
Java基础-SSM之Spring的AOP编程 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Spring的本质说白了就是动态代理,接下来我们会体验AOP的用法.它是对OOP的 ...
- Ubuntu 16.04开机自启Nginx简单脚本
本文要记述的是最简单的Ubuntu下开机自启 nginx的脚本 这里将nginx装在了/usr/local/nginx目录下,nginx本身没有注册成服务,所以直接使用服务开机自启是不行的,除非自己写 ...
- Javascript你不知道的那些事!(数字计算篇-变态篇)无意中聊天发现的一些奇怪的事情
javascript:alert(0.1 + 0.2) 如果看到这样一道题你会怎么思考了!大家肯定第一反应0.3,但是考虑到我已经这样问了!那么幼稚的答案我会专门写篇文章吗 然后人就开始折磨自己了会不 ...
- [转载]VS2013 密钥 – 所有版本
http://www.wxzzz.com/307.html Visual Studio Ultimate 2013 KEY(密钥):BWG7X-J98B3-W34RT-33B3R-JVYW9 Visu ...