ASP .NET Core 3.x Route
Endponits
ASP .NET Core 2.x 先前版本的 Route
ASP .NET Core 有別於 .NET MVC的設計方式,一樣提供了Middleware可以來拿使用
今天來稍微整理一下在ASP .NET Core 下是如何使用Route的
與前幾版最大的差異是使用新增加Endponits的概念
使用了兩個Middleware去處理route的事情
也是剛開始很容易搞混的地方
app.UseRouting();
//有點類似setting的感覺,在這個middleware會針對request的內容去做初始化
app.UseAuthorization();
//這邊才是真正去設定的地方,使用delegate去做設定
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
UseEndpoints這個Middleware
提供了endpoints可以擴充一些方法去針對route去做設定
ASP .NET Core 3.x 考量到個專案的整合性, 因此新增加Endponit,
提供裡一些擴充的方法
新增了幾個方法例如
endpoints.MapRazorPages(); //RazorPages
endpoints.MapControllers(); //MVC
endpoints.MapHub(<Thub>);//SingalR
endpoints.MapGrpcService<GreeterService>(); //gRPC
endpoints.MapBlazorHub(); //Blazor
實際打開個專案範本下所設定的也不相同
可以再MVC專案裡面擴充其他類型的頁面
例如在專案裡面註冊ndpoints.MapRazorPages()
由於Razor pages的目錄結構都建立在pages資料夾下
註冊之後就可以使用Razor的路由
Endponit 也提供了一個MapHealthChecks方法,可以用來確認專案的執行狀況
首先在ConfigureServices先註冊一個AddHealthChecks()的方法
(官網上沒有提到這一個設定,但如果直接設定MapHealthChecks會有錯)
之後再Configure新增MapHealthChecks的設定
startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
services.AddHealthChecks(); //先註冊AddHealthChecks方法
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
...
endpoints.MapHealthChecks("/healthz"); //加上這一行
//也可以提供登入的驗證方法
//endpoints.MapHealthChecks("/healthz"); //加上這一行
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
直接呼叫專案下的/healthz ,就會回傳專案的健康狀況
目前看到大部分提到route的方式,大都是先前版本的做法
至於ASP .NET Core 3.x之後都還是有支援
只是預設的專案範本會有一些不相同
在先前版本主要route得分類有兩種:
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
舉例來說今天在HomeController的index新增了一組Attribute-Based
public HomeController(ILogger<HomeController> logger)
{
_logger = logger;
}
[Route("Home/test")]
public IActionResult Index()
{
return View();
}
雖然在startup.cs已經有設定好路由
但因為Attribute-Based的關係,所以會蓋掉共用的設定
URL必須要是https://localhost:5001/Home/test 才行
直接開始根目錄是找不到網頁的
必須要在上方再加入一組設定才行
[Route("")]//根目錄的router
[Route("Home/test")]
public IActionResult Index()
{
return View();
}
參考資料:
https://dotnettutorials.net/lesson/routing-asp-net-core-mvc/
https://dotnettutorials.net/lesson/attribute-routing-in-asp-net-core-mvc/