前言
在 ASP.NET MVC 或是 ASP.NET Core MVC 預設的 Route 會自動指定 Controller 及 Action 名稱的路徑,因為我們都是用大寫英文,而自動生成的路徑也都是以大寫顯示,雖然在路徑上直接打小寫的也是可以連到指定的路徑,但是在網站生成的連結都是大寫來顯示。
原本在 ASP.NET MVC 我要特定指定小寫的做法會是在 RouteConfig 設定 routes.MapMvcAttributeRoutes()
並且在 Controller 指定 RoutePrefix 及 Route 屬性。
然而今天在查詢資料時才發現原來有更簡單的方法,而且很久很久以前就支援了。
雖然手邊目前執行的專案是 ASP.NET MVC,筆記就一併記錄目前最新的版本 ASP.NET Core MVC (.NET6)。
ASP.NET MVC
修改 App_Start/RouteConfig.cs
在所有的 routes 設定之前加上
routes.LowercaseUrls = true;
居然這麼簡單就設定完成了,完全不用再打開 Controller 一一指定。這個方法適用於不需特殊指定名稱,僅是把預設路徑皆改變為小寫。
方法二:指定 Route attribute
這個明確的指定方法是可以更客製化,哪天路徑名稱想改是可以把名稱任意改變的,例如加上 v1 或 v2
routes.MapMvcAttributeRoutes()
以 HomeController 為範例,直接指定小寫的字串 (/Home/Privacy 變成 /home/privacy)
[RoutePrefix("home")]
public class HomeController : Controller
{
[Route("privacy")]
public ActionResult Privacy()
{
return View();
}
}
ASP.NET Core MVC (.NET6)
修改 Program.cs
,在
// 記得在 app build 之前加入此設定,把 LowercaseUrls 設為 true
builder.Services.Configure<routeoptions>(options =>
{
options.LowercaseUrls = true;
});
var app = builder.Build();
而 Route 指定則是直接在 Controller 的 Action 上明確指定
以下範例路徑即會將預設的 /home/privacy 變為 /home/test
public class HomeController : Controller
{
[Route("home/test")]
public ActionResult Privacy()
{
return View();
}
}