.net5 core webapi項目實戰之三:webapi的路由及與傳統mvc的不同點


 .net core webapi中路由總的設計原則可以參考官方文檔中的這一句話(紅圈處):

即 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風格的路由,網址如下:http://localhost:52384/api/users

這種路由方式需要給Controller設置Route屬性(本例中是[Route("api/[controller]")])作為路由模板,

然后用HTTP謂詞定位到Controller中的方法,即Controller還是從網址中解析,具體要執行controller中的哪個方法,

是由HTTP詞決定的,這種路由方式稱為"屬性路由"。

 

三、在上面的代碼中,

1 . 如果用GET的方式訪問http://localhost:52384/api/users 這個網址,則可以定位到ManageUsers()方法,

如果用POST或PUT等其他HTTP詞,是不能定位到ManageUsers()這個方法的,

執行controller中的哪個方法與方法名稱無關,而與HTTP詞有關,如果ManageUsers()這個方法名換成Abcd()后再去

訪問http://localhost:52384/api/users依然可以正確的得到"hello world."的字符串。

2 . 網址中"api"是特定字符串(可以根據需要修改),如果去掉,那么[Route("api/[controller]")]應改成[Route("[controller]")],

訪問的網址也應改成http://localhost:52384/users,

Controller上的Route()屬性用於指定路由匹配規則,特定字符串可以直接寫,關鍵字需要用[]括起來,變量則使用{},

Route()屬性可以作用在Controller下的方法上,后續再詳細介紹。

 

四、ASP.NET Core 具有以下 HTTP 謂詞模板:

HttpGet
HttpPost
HttpPut
HttpDelete
HttpHead
HttpPatch

 

五、.net core webapi中的方法稱為終結點(Endpoint)

 

六、.net core webapi中的controller都繼承自ControllerBase這個父類,而不是Controller,官方文檔的解釋如下:

 

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

上面的描述后續再結合具體的使用場景逐個講解。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM