ASP.NET Core Web API 开发-RESTful API实现
ASP.NET Core Web API 开发-RESTful API实现
REST 介绍:
符合REST设计风格的Web API称为RESTful API。
具象状态传输(英文:Representational State Transfer,简称REST)是Roy Thomas Fielding博士于2000年在他的博士论文 "Architectural Styles and the Design of Network-based Software Architectures" 中提出来的一种万维网软件架构风格。
目前在三种主流的Web服务实现方案中,因为REST模式与复杂的SOAP和XML-RPC相比更加简洁,越来越多的web服务开始采用REST风格设计和实现。例如,Amazon.com提供接近REST风格的Web服务执行图书查询;雅虎提供的Web服务也是REST风格的。
符合REST设计风格的Web API称为RESTful API。它从以下三个方面资源进行定义:
直观简短的资源地址:URI,比如:http://example.com/resources/。
传输的资源:Web服务接受与返回的互联网媒体类型,比如:JSON,XML,YAML等。
对资源的操作:Web服务在该资源上所支持的一系列请求方法(比如:POST,GET,PUT或DELETE)。PUT和DELETE方法是幂等方法。GET方法是安全方法(不会对服务器端有修改,因此当然也是幂等的)。
不像基于SOAP的Web服务,RESTful Web服务并没有“正式”的标准。这是因为REST是一种架构,而SOAP只是一个协议。虽然REST不是一个标准,但大部分RESTful Web服务实现会使用HTTP、URI、JSON和XML等各种标准。
实现举例
例如,一个简单的网络商店应用,列举所有商品,
GET http://www.store.com/products呈现某一件商品,
GET http://www.store.com/product/12345下单购买,
POST http://www.store.com/order
<purchase-order>
<item> ... </item>
</purchase-order>
常用的HTTP动词有下面五个(括号里是对应的SQL命令)
- GET(SELECT):从服务器取出资源(一项或多项)。
- POST(CREATE):在服务器新建一个资源。
- PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)。
- PATCH(UPDATE):在服务器更新资源(客户端提供改变的属性)。
- DELETE(DELETE):从服务器删除资源。
下面我们就来在ASP.NET Core Web API 中实现。
例子以用户为例,对用户的各个更改分别对应不同的HTTP 动词。
首先我们创建一个ASP.NET Core Web API 应用。可以参考之前博文: http://www.cnblogs.com/linezero/p/5497472.html
然后我们添加EF Core,来操作数据库。EF Core 教程:http://www.cnblogs.com/linezero/p/EntityFrameworkCore.html
首先我们来新建一个类 User.cs
public class User
{
public int Id { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
}
然后添加EF Core引用及创建DataContext.cs,并做配置。
EF Core 1.0 已经发布了,所以引用及配置都可以更新一下。
Install-Package Microsoft.EntityFrameworkCore.Sqlite
配置对应做更新
Install-Package Microsoft.EntityFrameworkCore.Tools –Pre
"tools": {
"Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final",
最后使用dotnet ef 命令来创建数据库。
dotnet ef migrations add MyFirstMigration dotnet ef database update
下面就来正式Web API 的开发。
这里我们添加一个Web API 控制器 UsersController 。
会默认为我们生成GET POST PUT DELETE 对应的方法。这里我们就来具体实现。
UsersController.cs
[Route("api/[controller]")]
public class UsersController : Controller
{
private DataContext Context;
public UsersController(DataContext _context)
{
Context = _context;
}
// GET: api/users
[HttpGet]
public IActionResult Get()
{
return Ok(Context.Users.ToList());
}
// GET api/users/5
[HttpGet("{id}")]
public IActionResult Get(int id)
{
var _user = Context.Users.FirstOrDefault(r => r.Id == id);
if (_user == null)
return NotFound();
return Ok(_user);
}
// POST api/users
[HttpPost]
public IActionResult Post([FromBody]User user)
{
Context.Add(user);
Context.SaveChanges();
return Created($"api/users/{user.Id}",user);
}
// PUT api/users/5
[HttpPut("{id}")]
public IActionResult Put(int id, [FromBody]User user)
{
var _user = Context.Users.FirstOrDefault(r => r.Id == id);
if (_user == null)
return NotFound();
_user.UserName = user.UserName;
_user.Password = user.Password;
Context.Update(_user);
Context.SaveChanges();
return Created($"api/users/{_user.Id}", _user);
}
// DELETE api/users/5
[HttpDelete("{id}")]
public IActionResult Delete(int id)
{
var _user = Context.Users.FirstOrDefault(r => r.Id == id);
if (_user == null)
return NotFound();
Context.Remove(_user);
Context.SaveChanges();
return NoContent();
}
}
实现好以后,我们使用Chrome 应用 ARC 来调试。
增加-》Post:
{"Id":1,"UserName":"LineZero","PassWord":"123456"}
http://localhost:5000/api/users
多个查询-》Get:
http://localhost:5000/api/users
单个查询-》Get(int id):
http://localhost:5000/api/users/1
修改-》Put:
{"UserName":"LineZeroASPNETCore","PassWord":"123456789"}
http://localhost:5000/api/users/1
删除-》Delete:
http://localhost:5000/api/users/1

对应的Http 操作也都实现了。数据库相关操作也在代码里。
对于ASP.NET Core Web API REST 风格的一种代码实现。
ASP.NET Core Web API 默认JSON序列化的话,会将属性名自动转化为小写,这里我们只需要一句配置即可解决。
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddMvc().AddJsonOptions(r=>r.SerializerSettings.ContractResolver= new Newtonsoft.Json.Serialization.DefaultContractResolver());
}
本文示例代码:https://github.com/linezero/Blog/tree/master/ASPNETCoreAPI
参考链接:
https://zh.wikipedia.org/wiki/REST
http://www.ruanyifeng.com/blog/2014/05/restful_api.html
如果你觉得本文对你有帮助,请点击“推荐”,谢谢。
ASP.NET Core Web API 开发-RESTful API实现的更多相关文章
- 使用ASP.NET Core 3.x 构建 RESTful API - 2. 什么是RESTful API
1. 使用ASP.NET Core 3.x 构建 RESTful API - 1.准备工作 什么是REST REST一词最早是在2000年,由Roy Fielding在他的博士论文<Archit ...
- 使用ASP.NET Core 3.x 构建 RESTful API - 1.准备工作
以前写过ASP.NET Core 2.x的REST API文章,今年再更新一下到3.0版本. 先决条件 我在B站有一个非常入门的ASP.NET Core 3.0的视频教程,如果您对ASP.NET Co ...
- 使用ASP.NET Core 3.x 构建 RESTful API - 3.4 内容协商
现在,当谈论起 RESTful Web API 的时候,人们总会想到 JSON.但是实际上,JSON 和 RESTful API 没有半毛钱关系,只不过 JSON 恰好是RESTful API 结果的 ...
- 使用ASP.NET Core 3.x 构建 RESTful API - 3.1 资源命名
之前讲了RESTful API的统一资源接口这个约束,里面提到了资源是通过URI来进行识别的,每个资源都有自己的URI.URI里还涉及到资源的名称,而针对资源的名称却没有一个标准来进行规范,但是业界还 ...
- 使用ASP.NET Core 3.x 构建 RESTful API - 3.2 路由和HTTP方法
ASP.NET Core 3.x 的路由 路由机制会把一个请求的URI映射到一个Controller上面的Action,所以当你发送一个HTTP请求的时候,MVC框架会解析这个请求的URI,并尝试着把 ...
- 使用ASP.NET Core 3.x 构建 RESTful API - 3.3 状态码、错误/故障、ProblemDetails
HTTP状态码 HTTP状态码会告诉API的消费者以下事情: 请求是否执行成功了 如果请求失败了,那么谁为它负责 HTTP的状态码有很多,但是Web API不一定需要支持所有的状态码.HTTP状态码一 ...
- 使用ASP.NET Core 3.x 构建 RESTful API - 4.2 过滤和搜索
向Web API传递参数 数据可以通过多种方式来传给API. Binding Source Attributes 会告诉 Model 的绑定引擎从哪里找到绑定源. 共有以下六种 Binding Sou ...
- 使用ASP.NET Core 3.x 构建 RESTful API - 5.1 输入验证
说到验证,那就需要做三件事: 定义验证规则 按验证规则进行检查 报告验证的错误.在把错误报告给API消费者的时候,报告里并不包含到底是服务端还是API消费者引起的错误,这是状态码的工作.而通常响应的B ...
- 使用ASP.NET Core 3.x 构建 RESTful API - 4.1 面向外部的Model
Entity Framework Core 使用的 Entity Model 是用来表示数据库里面的记录的. 而面向外部的 model 则表示了要传输的东西.这类 model 有时候叫做 Dto,有时 ...
随机推荐
- 《OOC》笔记(1)——C语言const、static和extern的用法
<OOC>笔记(1)——C语言const.static和extern的用法 C语言中const关键字用法不少,我只喜欢两种用法.一是用于修饰函数形参,二是用于修饰全局变量和局部变量. 用c ...
- 纠结于搞.Net待遇不高的同学入...
最近看到不少抱怨搞.net工资低的帖子.别的方向我不是太清楚,作为搞了近8年.Net信息系统开发的码农也想发表下自己的意见. 由于我的阅历和能力有限,首先想限定下本文的范围.这里说的“信息系统”主要包 ...
- sql基础知识:分页+排序
Oracle的分页还真是挺恶心地,不像mysql直接Limit就搞定 select name from student limit 0,20; Oracle需要借助rownum实现: select * ...
- [Java面试二]Java基础知识精华部分.
一:java概述(快速浏览): 1991 年Sun公司的James Gosling等人开始开发名称为 Oak 的语言,希望用于控制嵌入在有线电视交换盒.PDA等的微处理器: 1994年将Oak语言更名 ...
- 合法提交Html标签 Page指令
3.2.1 提交合法的HTML标签(1) 有时候我们需要让我们提交的文本展示出来的效果非常美观,通常会对服务器提交一些HTML标签来控制文本或内容的样式. HTML标签可能包含了很多不安全的因素,所以 ...
- WebKit技术内幕
WebKit技术内幕(浏览器内核|渲染引擎| HTML5| Chromium项目Committer重磅作品) 朱永盛 著 ISBN 978-7-121-22964-0 2014年6月出版 定价:7 ...
- python学习 变量的操作 与 基本数据类型
一变量(本文使用python3.5): #变量:是计算机内存中的一块区域,变量可以存储规定范围内的值,变量可以改变#在python中变量是计算机内存中数据的引用 python的变量没有明显的类型,具体 ...
- c#将list集合转换为datatable的简单办法
public static class ExtensionMethods { /// <summary> /// 将List转换成DataTabl ...
- Android开发之时间日期1
对于手机的时间日期设置估计大家一定都不陌生吧,今天做了一个关于时间日期设置的小例子,其中遇到一个问题,求指导,如何使设置的时间日期和手机系统同步?还望高手指点一二. 先不说这个了,分享一下我的小例子 ...
- javase基础复习攻略《五》
总结完JAVA的基础语法和面向对象思想后,今天为大家补充一下JAVA中的数组,数组是什么呢?大家是不是想到了集合,数组和集合有相似之处,集合中的数据无序,不可以重复.数组中则存放着具有相同特征的一组数 ...