大家好啊~昨天我們講了middleware
在ASP.NET CORE上扮演的角色後,再來想要來說說另一個更重要的東西「路由」,路由是甚麼呢,你可以想像我們平常在路上是不是會看到很多路標,當我們假如要去台北火車站時,我們通常會看特定的路標才會到北車,或者現在要去西門町,我們也是跟著路標才會到西門町,所以路由就有點像是路標的功能,而這些路標的就是由這些開發的人員來設定
在ASP.NET COER中,寫路由的方式主要可以分為兩種 傳統路由
和屬性路由
,這兩種方式都有各自使用的時候,比如傳統路由
蠻常會使用在MVC中,主要用來搭配Controller和View來做使用,另外屬性路由
就比較常搭配REST API來使用
傳統路由的使用方式很簡單,想到我們昨天說的中介軟體,它裡面就有一個很好的方法MapControllerRoute
可以用來建立單一路由
這裡我們先將路由的命名為default
,路由的範本是"{controller=Home}/{action=Index}/{id?}"
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
在MapControllerRoute裡name
表達的意思就是這路由的名稱而已,較重要的地方就是pattern
,pattern
中controller跟action後面加等號(=)表示預設的值id
後面加個問號(?)則表optional(就是可給可不給)
其中這裡的controller和action都只是預設值,預設和選擇性路由參數不一定要全部出現在URL才算相符,換句話說如果有另一個URL路徑是/Welcome/home/3 也是可以找到的,最主要是在寫Controller的時候要注意,再說除了這種寫法,也是可以把路徑給寫死(不建議)
再來我們先創一個controller的cs檔
using Microsoft.AspNetCore.Mvc;
namespace WepApi.Controllers
{
public class WelcomeController : Controller
{
public IActionResult Help(int id)
{
return Ok(new {hello = id});
}
}
}
這裡我們記得繼承Controller
,不然就沒有路由的公用了,再來class的命名也會影響路由的命名像這裡就是以WelcomeController,所以在剛才的controller的參數就會是Welcome
,另外action的部分就會跟class裡的方式命名有關係,這裡就看到Help就會是action
的部分,另外id就是一方式的參數來調整
屬性路由的放式可以說簡化了傳統路由
並且都有路由的功能,使用的方法也很簡單,最一開始也是要引用特定的中介軟體MapControllers()
,
app.MapControllers()
通常如果你的專案使有用到REST API的話使用率使很高,但傳統路由的方式也是可以用,但推薦如果是用REST API的話就使用屬性路由
哪接下來的話就是要到各自的controller來使用,下面是我們可以用的方式,主要透過[Route]
來寫我們的路由
[Route("/welcome/hello")] // 絕對路徑
[Route("[controller]/[action]")] // 特別的路由名稱
寫出完整的路由應該也不用多說,這裡比較要注意的地方應該是特別的路由方式,常見的保留名稱有action
、area
、controller
、handler
、page
,其中比較常用的應該是controller和action,用法跟傳統路由的方式很像
再來在剛介紹時有提到REST API,這種網頁風格常見的方法有GET、POST、PUT、DELETE、PATCH,由於ASP.NET 人非常好就有先提供幾種方式,讓我們可以達到RESU API的網頁風格,下面是官網提供的HTTP 動詞範本,這些範本的使用會在後面提到這裡就不先介紹了
最後今天就先介紹了路由的使用方式,希望大家都可以運用的很熟悉,哪我們就明天再見了~拜拜
參考資料:
https://learn.microsoft.com/zh-tw/aspnet/core/mvc/controllers/routing?view=aspnetcore-6.0
https://ithelp.ithome.com.tw/articles/10203560