- Custom Routes
- 使 URL 更簡單
- 提高搜尋引擎排名 (Search Engine Ranking)
- 安排 Route 順序
- 先寫的 MapRoute 會先使用
- 越特殊的放前面
- 通用的放後面
- 註冊 Custom Route 到 Route Table 物件
- 因開起 MVC 空專案預設就會有一組 Route
- 首頁指定為 controller = "Home", action = "Index"
- 下列將創建一組特殊的 Route 進行試範
- Setp 1:先建立 Home 的 Index
- Setp 2:此設定加入一組 MapRoute 設定如下
- url: "User/Name/{Age}":為網址位置
- controller = "User":對應至 controller
- action = "UserName":對應至 action
using System.Web.Mvc;
using System.Web.Mvc;
using System.Web.Routing;
namespace MVCRouting
{
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
// 忽略所有 *.axd 的網址路徑
// 在預設 RegisterRoutes 方法中的 IgnoreRoute 用來定義 不要透過 Routing 處理的網址
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
// Routing 網址路徑
// MapRoute 則是最常用來定義 Routing 規則的擴充方法
routes.MapRoute(
name: "ShowUser",
url: "User/Name/{Age}",
defaults: new
{
controller = "User",
action = "UserName",
Age = UrlParameter.Optional
}
);
routes.MapRoute(
name: "Default", // 路由名稱:唯一名稱對應唯一的 Route
url: "{controller}/{action}/{id}", // URL 及參數:通過簡單的模式,將 URL 解析具有意義的字段
defaults: new // 參數預設值
{
controller = "Home", // 默認值:提供與對應字段的默認值
action = "Index",
id = UrlParameter.Optional
// constraints // 約束:一系列的約束應用到 URL 模式上
// 用來嚴格定義 URL 對應 Route
}
);
}
}
}
- Setp 3:controller 名稱與 action 名稱需對應至 MapRoute
using System.Web.Mvc;
namespace MVCRouting.Controllers
{
public class UserController : Controller
{
// GET: User
public ActionResult UserName()
{
return View();
}
}
}
- Setp 4:目錄結構會如下,並進行測試
- 輸入 /User/UserName 與 /User/User 會導引至相同頁面
- MVC 5 Attribute Routing
- MVC 5 新功能 Attribute Routing
- 啟用 Attribute Routing
- RouteConfig.cs 文件中調用 MapMvcAttributeRoutes 方法
- Action Method 套用
- Setp 1:修該 RouteConfig.cs
using System.Web.Mvc;
using System.Web.Routing;
namespace MVCRouting
{
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
// 忽略所有 *.axd 的網址路徑
// 在預設 RegisterRoutes 方法中的 IgnoreRoute 用來定義 不要透過 Routing 處理的網址
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
// Routing 網址路徑
// MapRoute 則是最常用來定義 Routing 規則的擴充方法
routes.MapMvcAttributeRoutes(); //Attribute Routing
routes.MapRoute(
name: "Default", // 路由名稱:唯一名稱對應唯一的 Route
url: "{controller}/{action}/{id}", // URL 及參數:通過簡單的模式,將 URL 解析具有意義的字段
defaults: new // 參數預設值
{
controller = "Home", // 默認值:提供與對應字段的默認值
action = "Index",
id = UrlParameter.Optional
// constraints // 約束:一系列的約束應用到 URL 模式上
// 用來嚴格定義 URL 對應 Route
}
);
}
}
}
- Setp 2:Action Method 套用 Attribute Routing
- {Age?} 為 Age = UrlParameter.Optional
- 如 {Age} 為必要參數
- 初使值 {Age = 30}
using System.Web.Mvc;
namespace MVCRouting.Controllers
{
public class UserController : Controller
{
[Route("User/Name/{Age?}")]
public ActionResult UserName()
{
return View();
}
}
}
- Setp 3:測試,因為設定為 Attribute Routing ,原本網頁將會找不到
- RouteData.Values Controller
- Action Method 使用 RouteData.Values 集合讀取路由資訊
[Route("User/Name/{Age?}")]
public ActionResult UserName()
{
ViewBag.mycontroller = RouteData.Values["controller"];
ViewBag.myaction = RouteData.Values["action"];
ViewBag.myage = RouteData.Values["Age"];
return View();
}
[Route("User/Name/{Age?}")]
public ActionResult UserName(string age)
{
ViewBag.mycontroller = RouteData.Values["controller"];
ViewBag.myaction = RouteData.Values["action"];
ViewBag.myage = age;
return View();
}
<hi>Lyndon</hi>
@ViewBag.mycontroller
@ViewBag.myaction
@ViewBag.myage
沒有留言:
張貼留言