.net core webapi项目实战之三:webapi的路由及与传统mvc的不同点

 .net core webapi中路由总的设计原则可以参考官方文档中的这一句话(红圈处):

.net core webapi项目实战之三:webapi的路由及与传统mvc的不同点

即 REST APIs 应使用属性路由将应用程序的功能建模为一组资源,对资源的操作由 HTTP 谓词表示。

 

下面我们结合UsersController.cs的代码来分析如何体现这一设计原则:

 1 using Microsoft.AspNetCore.Mvc; 
 2 
 3 namespace WebApiDemo.Controllers
 4 {
 5     [Route("api/[controller]")]
 6     [ApiController]
 7     public class UsersController : ControllerBase
 8     {
 9 
10         [HttpGet]
11         public ContentResult ManageUsers()
12         {
13             return Content("hello world.");
14         }
15 
16     }
17 }

当客户端(可以是浏览器或其他应用程序)访问网址 http://localhost:52384/api/users 的时候,

框架将网址经路由系统的解析映射到ManageUsers()这个方法上, 此方法返回 "hello world."的字符串,然后传递给客户端,

, 在这个过程中,路由是如何发挥作用的?它和MVC中的路由又有什么不同?

 

一、在传统的MVC框架中,如果我们要输出"hello world."的字符串,网址会是这样的:

http://localhost:52384/users/manageusers,

框架在解析的时候将users对应到UsersController ,manageusers对应到该Controller下的Action ,

这是因为传统的MVC路由模板一般是这样的"{controller}/{action}/{id?}" ,这种路由方式称为"传统路由"。

 

二、在.net core webapi中,使用的是RESTful风格的路由,

这种路由方式需要给Controller设置Route属性(本例中是[Route("api/[controller]")])作为路由模板,

然后用HTTP谓词定位到Controller中的方法,即Controller还是从网址中解析,具体要执行controller中的哪个方法,

是由HTTP谓词决定的,这种路由方式称为"属性路由"。

 

三、在上面的代码中,如果用GET的方式访问http://localhost:52384/api/users 这个网址,则可以定位到ManageUsers()方法,

如果用POST或PUT等其他HTTP谓词,是不能定位到ManageUsers()这个方法的,

执行controller中的哪个方法与方法名称无关,而与HTTP谓词有关,如果把ManageUsers()这个方法名换成Abcd()后再去

访问http://localhost:52384/api/users依然可以正确的得到"hello world."的字符串。

 

四、ASP.NET Core 具有以下 HTTP 谓词模板:

HttpGet
HttpPost
HttpPut
HttpDelete
HttpHead
HttpPatch

 

五、.net core webapi中的方法称为终结点(Endpoint)

 

六、.net core webapi中的controller都继承自ControllerBase这个父类,而不是Controller,官方文档的解释如下:

.net core webapi项目实战之三:webapi的路由及与传统mvc的不同点

 

七、[ApiController]的作用,官方文档的解释如下:

.net core webapi项目实战之三:webapi的路由及与传统mvc的不同点

上面的描述先不去深究,后续会结合具体的使用场景逐个讲解。

 

上一篇:c# webapi 移除[Frombody]


下一篇:[源码分析]StringBuffer