.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]的作用,官方文檔的解釋如下:

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