使用ASP.NET Web API构建Restful API

目录
  • 一、前言
  • 二、获取所有数据
  • 三、获取详情
  • 四、新增数据
  • 五、修改数据
  • 六、删除数据
  • 七、特性路由
    • (1) 基本路由映射
    • (2) 路由映射参数
    • (3) 多重特性路由
    • (4) 缺省参数路由
    • (5) 参数约束路由
    • (6) 通配符(*)路由变量
    • (7) 路由映射复杂参数
    • (8) 路由前缀

一、前言

RESTful API 是基于HTTP协议产生的一种相对简单的API设计方案;

RESTful 的核心是 everything is a “resource”,所有的HTTP action,都应该是相应resource上可以被操作和处理的,而API 就是对资源的管理操作,而这个具体操作是由 HTTP action 指定的。

使用HTTP的GET、POST、DELETE、PUT来表示对于资源的增删改查。

  • GET:读取(Read)
  • POST:新建(Create)
  • PUT:更新(Update)
  • DELETE:删除(Delete)

学习资料准备:

(1)用于测试的实体类:

public class Student
{
    public string StuNo { get; set; }    //学号
    public string StuName { get; set; }  //姓名
    public string StuSex { get; set; }   //性别
}

(2)模拟的测试数据(编写在webapi类的构造函数中):

public static List<Student> StuList { get; set; }
public ServerController()
{
    StuList = new List<Student>();
    StuList.Add(new Student { StuNo = "001", StuName = "孙悟空", StuSex = "男" });
    StuList.Add(new Student { StuNo = "002", StuName = "猪八戒", StuSex = "男" });
    StuList.Add(new Student { StuNo = "003", StuName = "白骨精", StuSex = "女" });
}

二、获取所有数据

API接口:

[HttpGet]
public List<Student> GetList([FromBody]dynamic obj)
{
	return StuList;
}

三、获取详情

API接口:

[HttpGet]
public Student GetDetail(string id)
{
	Student stu = StuList.SingleOrDefault(p => p.StuNo.Equals(id));
	return stu;
}

四、新增数据

API接口:

[HttpPost]
public IHttpActionResult Add([FromBody] Student stu)
{
    StuList.Add(stu);
    return Json(new { msg = "添加成功!",data=StuList });
}

五、修改数据

API接口:

[HttpPut]
public IHttpActionResult Update(string id, [FromBody] Student stu)
{
    Student model = StuList.SingleOrDefault(p => p.StuNo.Equals(id));
    if (model == null)
    	return Json(new { msg = "修改的数据不存在!" });
    model.StuNo = stu.StuNo;
    model.StuName = stu.StuName;
    model.StuSex = stu.StuSex;
    return Json(new { msg = "修改成功!", data = model });
}

六、删除数据

API接口:

[HttpDelete]
public IHttpActionResult Delete(string id)
{
    Student model = StuList.SingleOrDefault(p => p.StuNo.Equals(id));
    if (model == null)
    	return Json(new { msg = "删除的数据不存在!" });
    StuList.Remove(model);
    return Json(new { msg = "删除成功!", data = StuList });
}

七、特性路由

(1) 基本路由映射

API接口:

[HttpGet]
[Route("api/Route/Basic")]
public IHttpActionResult GetBasic()
{
	return Json(new { msg = "测试基本的特性路由!" });
}

接口访问地址:

http://localhost:60650/api/Route/Basic

(2) 路由映射参数

API接口:

[HttpGet]
[Route("api/Route/Param/{id}/{name}")]
public IHttpActionResult Get2(string id,string name)
{
	return Json(new { msg = "测试路由映射参数!",data = new { id= id,name=name } });
}

接口访问地址:

http://localhost:60650/api/Route/Param/001/孙悟空

(3) 多重特性路由

API接口:

[HttpGet]
[Route("api/Route/Multiple1/{id}/{name}")]
[Route("api/Route/Multiple2/{id}/{name}")]
public IHttpActionResult Get3(string id,string name)
{
	return Json(new { msg = "测试多重特性路由!",data = new { id= id,name=name } });
}

接口访问地址:

http://localhost:60650/api/Route/Multiple1/001/孙悟空

http://localhost:60650/api/Route/Multiple2/001/孙悟空

(4) 缺省参数路由

API接口:

[HttpGet]
[Route("api/Route/Default/{id}/{name?}")]
public IHttpActionResult Get4(string id, string name="孙悟空")
{
    return Json(new { msg = "测试缺省参数路由!", data = new { id = id, name = name } });
}

[HttpGet]
[Route("api/Route/Default/{id}/{name=孙悟空}")]
public IHttpActionResult Get4(string id, string name)
{
	return Json(new { msg = "测试缺省参数路由!", data = new { id = id, name = name } });
}

接口访问地址:

http://localhost:60650/api/Route/Default/001

(5) 参数约束路由

ASP.NET Web API内置约束有下面这些:

{x:alpha} 约束大小写英文字母
{x:bool}
{x:datetime}
{x:decimal}
{x:double}
{x:float}
{x:guid}
{x:int}
{x:length(6)}
{x:length(1,20)} 约束长度范围
{x:long}
{x:maxlength(10)}
{x:min(10)}
{x:range(10,50)} //约束值的范围
{x:regex(正则表达式)}

可以设置多个约束:

[Route("api/Route/orders/{id:int:min(1)}")]

API接口:

[HttpGet]
[Route("api/Route/Check/{id:range(1,100)}/{name}")]
public IHttpActionResult Get5(int id, string name)
{
	return Json(new { msg = "测试参数约束路由!", data = new { id = id, name = name } });
}

接口访问地址:(以下地址可以正常访问接口)

http://localhost:60650/api/Route/Check/11/孙悟空

接口访问地址:(以下地址无法访问接口)

http://localhost:60650/api/Route/Check/101/孙悟空

(6) 通配符(*)路由变量

API接口:

[HttpGet]
[Route("api/Route/Date/{id:range(1,100)}/{name}/{*birthday}")]
public IHttpActionResult Get6(int id, string name,DateTime birthday)
{
	return Json(new { msg = "*使用!", data = new { id = id, name = name,birthday = birthday.ToString("yyyy年MM月dd日") } });
}

接口访问地址:

http://localhost:60650/api/Route/Date/1/jack/1988-8-8

接口访问地址:(此地址如果在路由中没有*则无法访问,因为程序会认为“1988/8/8”是三个参数,而不是一个参数)

http://localhost:60650/api/Route/Date/1/jack/1988/8/8

(7) 路由映射复杂参数

给实体类添加特性使其支持绑定:

[ModelBinder]
public class Student
{
	public string StuNo { get; set; }    //学号
	public string StuName { get; set; }  //姓名
	public string StuSex { get; set; }   //性别
}

方案一API接口:

[HttpGet]
[Route("api/Route/Class/{stu.StuNo}/{stu.StuName}/{stu.StuSex}")]
public IHttpActionResult Get7(Student stu)
{
	return Json(new { msg = "路由映射复杂参数!", data = stu });
}

方案一接口访问地址:

http://localhost:60650/api/Route/Class/001/jack/man

方案二API接口:

[HttpGet]
[Route("api/Route/Class")]
public IHttpActionResult Get7(Student stu)
{
	return Json(new { msg = "路由映射复杂参数!", data = stu });
}

方案二接口访问地址:

http://localhost:60650/api/Route/Class?stu.StuNo=001&stu.StuName=jack&stu.StuSex=man

(8) 路由前缀

在控制器类上定义路由前缀:

[RoutePrefix("api/Prefix")]
public class PrefixController : ApiController
{

}

路由前缀API接口:

[Route("Basic")]
public IHttpActionResult Get1()
{
	return Json(new { msg = "测试路由前缀!" });
}

接口访问地址:

http://localhost:60650/api/Prefix/Basic

取消路由前缀API接口:

[Route("~/api/Cancel/Basic")]  //通过~/取消路由前缀
public IHttpActionResult Get2()
{
	return Json(new { msg = "取消路由前缀!" });
}

接口访问地址:

http://localhost:60650/api/Cancel/Basic

到此这篇关于使用ASP.NET Web API构建Restful API的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Asp.Net Core WebAPI使用Swagger时API隐藏和分组详解

    1.前言 为什么我们要隐藏部分接口? 因为我们在用swagger代替接口的时候,难免有些接口会直观的暴露出来,比如我们结合Consul一起使用的时候,会将健康检查接口以及报警通知接口暴露出来,这些接口有时候会出于方便考虑,没有进行加密,这个时候我们就需要把接口隐藏起来,只有内部的开发者知道. 为什么要分组? 通常当我们写前后端分离的项目的时候,难免会遇到编写很多接口供前端页面进行调用,当接口达到几百个的时候就需要区分哪些是框架接口,哪些是业务接口,这时候给swaggerUI的接口分组是个不错的选

  • asp.net core webapi 服务端配置跨域的实例

    在前后端分离开发中服务端仅仅只为前端提供api接口,并且前后端往往单独部署,此时就会出现浏览器跨域问题.asp.net core提供了简单优雅的解决方案. 在startup文件的Configure添加如下代码(替换"http://localhost:8080"为你的前端部署地址,此处测试的前端地址为本地的8080端口) 注:asp.net core2.0以下需安装nuget包:Microsoft.AspNetCore.Cors app.UseCors(builder => { b

  • ASP.NET Core之Web API介绍

    目录 1.简单介绍 2.自定义格式化(Format) 1.特定格式的操作结果 2.配置格式化程序 3.添加对 XML 格式的支持 4.强制特定格式化 5.响应格式 URL 映射 6.自定义格式化程序 Protocol Buffers (简称 protobuf) 1.简单介绍 ASP.NET Core Web API 是 ASP.NET Core MVC 的一个功能.ASP.NET Core MVC 包含了对 Web API 的支持.可以构建多种客户端的 HTTP 服务.ASP.NET Core

  • ASP.NET中Web API解决跨域问题

    一.什么是跨域问题 跨域:指的是浏览器不能执行其他网站的脚本.是由浏览器的同源策略造成的,是浏览器施加的安全限制.(服务端可以正常接收浏览器发生的请求,也可以正常返回,但是由于浏览器的安全策略,浏览器不能处理服务端的返回). 那么什么是同源策略呢? 同源策略/SOP(Same origin policy)是一种约定,由Netscape公司1995年引入浏览器,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS.CSFR等攻击.所谓同源是指"协议+域名+端口"

  • 使用Visual Studio创建ASP.NET Web API项目

    在本篇文章中将讲解如何使用Visual Studio创建一个新的ASP.NET Web API项目. 在VisualStudio中有两种方式用于创建WebAPI项目: 1.创建带MVC的WebAPI项目. 2.创建独立的WebAPI项目. 一.创建带MVC的WebAPI项目 在示例程序中使用的是VisualStudio 2013版本,创建一个新的WebAPI项目并且带MVC的模板,它包含了所有必要的引用. 1.选择“文件”->“新建”->“项目”,截图如下所示: 2.在弹出的新建项目窗口中,左

  • ASP.NET中Web API的参数绑定

    在这篇文章中,我们将学习WebAPI如何将HTTP请求数据绑定到一个操作方法的参数中. 操作方法在WebAPI控制器中可以有一个或多个不同类型的参数.它可以是基本数据类型或复杂类型.WebAPI根据URL的查询字符串或请求主体中参数类型来绑定操作方法的参数. 如果参数类型是基本数据类型(int,double,string,DateTime,bool等),WebAPI默认将会从URL中获取参数值(即通过querystring)获取. 如果参数类型的复杂类型,WebAPI默认从请求主体中获取参数值.

  • 详解如何在ASP.NET Core Web API中以三种方式返回数据

    在 ASP.NET Core 中有三种返回 数据 和 HTTP状态码 的方式,最简单的就是直接返回指定的类型实例,如下代码所示: [ApiController] [Route("[controller]")] public class WeatherForecastController : ControllerBase { [HttpGet] public IEnumerable<WeatherForecast> Get() { var rng = new Random()

  • ASP.NET Core WebApi返回结果统一包装实践记录

    目录 前言 统一结果类封装 定义包装类 升级一下操作 进一步完善 漏网之鱼处理 总结 前言 近期在重新搭建一套基于ASP.NET Core WebAPI的框架,这其中确实带来了不少的收获,毕竟当你想搭建一套框架的时候,你总会不自觉的去想,如何让这套框架变得更完善一点更好用一点.其中在关于WebApi统一结果返回的时候,让我也有了更一步的思考,首先是如何能更好的限制返回统一的格式,其次是关于结果的包装一定是更简单更强大.在不断的思考和完善中,终于有了初步的成果,便分享出来,学无止境思考便无止境,希

  • ASP.NET Core在WebApi项目中使用Cookie

    目录 一.Cookie的作用 二.在ASP.NET Core中使用Cookie 1.在控制器中直接使用Cookie 1.1.设置Cookie 1.2.获取Cookie 1.3.删除Cookie信息 2.封装Cookie 一.Cookie的作用 Cookie通常用来存储有关用户信息的一条数据,可以用来标识登录用户,Cookie存储在客户端的浏览器上.在大多数浏览器中,每个Cookie都存储为一个小文件.Cookie表示为键/值对的形式,可以利用键来读取.写入或删除Cookie. 在ASP.NET

  • 详解ASP.NET Core WebApi 返回统一格式参数

    业务场景: 业务需求要求,需要对 WebApi 接口服务统一返回参数,也就是把实际的结果用一定的格式包裹起来,比如下面格式: { "response":{ "code":200, "msg":"Remote service error", "result":"" } } 具体实现: using Microsoft.AspNetCore.Mvc; using Microsoft.AspNe

随机推荐