分享主軸
路由(Routing)在 Web 應用中是一種用來處理 URL 請求的機制
其主要作用是將 URL 映射到應用中的特定資源,如控制器、方法或頁面
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
會看到以往需要依賴 app.UseRouting() 與 app.UseEndpoints() 的 Middleware 去執行應用程式路由規範
簡單講解一下意思,如下說明
app.UseRouting() : 是把應用程式內的 Url 匹配到這個中介,以及根據請求選擇最合適的端點去做匹配 => 個人認為可以想成 匹配終端
app.UseEndpoints() : 將匹配到的終端加入此中介 ,並執行與此匹配到的端點的關聯委派 (這個委派包含了處理請求的具體邏輯) => 個人認為可以想成 執行終端
以 ASP .NET Core 8 為例,路由設定在 program.cs 內,如下新建好的專案範本
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}"); //配置默認路由
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.MapControllerRoute(
name: "custom1",
pattern: "custom1/{*custom1}",
defaults: new { controller = "Home", action = "Custom1" });
app.MapControllerRoute(
name: "custom2",
pattern: "custom2/{*custom2}",
defaults: new { controller = "Home", action = "Custom2" });
Controller
public class HomeController : Controller
{
public IActionResult Index()
{
return Content("Default Route");
}
public IActionResult Custom1()
{
return Content("Custom Route 1");
}
public IActionResult Custom2()
{
return Content("Custom Route 2");
}
}
如下效果
app.MapControllers() //配置控制器路由
[ApiController]
[Route("[api/[controller]]")]
public class ProductsController : ControllerBase
{
...
}
[HttpGet("{id}")]
[HttpPost("")]
[HttpDelete("{id}")]
[HttpPut("{id}")]
[HttpPatch("{id}")]
{param:int}:參數必須是整數
{param:bool}:參數必須是布爾值
{param:datetime}:參數必須是日期時間
{param:decimal}:參數必須是十進制數
{param:double}:參數必須是雙精度浮點數
{param:float}:參數必須是單精度浮點數
{param:guid}:參數必須是 GUID
{param:length(5)}:參數的長度必須是 5
{param:minlength(3)}:參數的最小長度必須是 3
{param:maxlength(10)}:參數的最大長度必須是 10
{param:range(1,100)}:參數的值必須在 1 到 100 之間
舉例
[ApiController]
[Route("api/[controller]")]
public class ProductsController : ControllerBase
{
// GET: api/products/5
[HttpGet("{id:int}")]
public string GetById(int id)
{
...
}
// GET: api/products/category/electronics
[HttpGet("category/{name:length(3,20)}")]
public string GetByCategory(string name)
{
...
}
// GET: api/products/range/1/100
[HttpGet("range/{min:int}/{max:int}")]
public string GetByRange(int min, int max)
{
...
}
}
今日結語
路由說起來也確實很重要,了解它更可以掌握整個 ASP .NET Core 設定,就像是今天要去某個地方,需要導航導引路,路由也正是 ASP .NET Core 內的 URL 配置設定!
希望有幫助到大家,明天繼續努力 ~
參考網址
https://learn.microsoft.com/en-us/aspnet/core/mvc/controllers/routing?view=aspnetcore-8.0