基于参数类型的MVC路由匹配
MVC Route match based on parameter type
我希望 ThisAction 控制器看起来像这样:
public ActionResult Index()...
public ActionResult Index(int programId)...
public ActionResult Index(string programKey)...
以这样设置路线为目标
www.website.com/ThisAction/ <- 匹配第一个函数
www.website.com/ThisAction/123 <- 匹配第二个函数
www.website.com/ThisAction/ABC <- 匹配第三个函数
是否可以在 global.asx 路由中设置?
您需要使用具有路由约束的属性路由才能轻松获得这种灵活性。
[RoutePrefix("ThisAction")]
public class ThisActionController : Controller {
[HttpGet]
[Route("")] //Matches GET ThisAction
public ActionResult Index() {
//...
}
[HttpGet]
[Route("{programId:int}")] //Matches GET ThisAction/123
public ActionResult Index(int programId) {
//...
}
[HttpGet]
[Route("{programKey}")] //Matches GET ThisAction/ABC
public ActionResult Index(string programKey) {
//...
}
}
确保在 RouteConfig
中启用属性路由
public class RouteConfig {
public static void RegisterRoutes(RouteCollection routes) {
//...other code removed for brevity
//Attribute routes
routes.MapMvcAttributeRoutes();
//convention-based routes
//...other code removed for brevity
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = "" }
);
}
}
该路由将与基于边约定的路由一起工作。
请注意,一旦在控制器上使用它,就必须在整个控制器上使用它。所以控制器要么全基于约定,要么全属性路由。
我希望 ThisAction 控制器看起来像这样:
public ActionResult Index()...
public ActionResult Index(int programId)...
public ActionResult Index(string programKey)...
以这样设置路线为目标
www.website.com/ThisAction/ <- 匹配第一个函数
www.website.com/ThisAction/123 <- 匹配第二个函数
www.website.com/ThisAction/ABC <- 匹配第三个函数
是否可以在 global.asx 路由中设置?
您需要使用具有路由约束的属性路由才能轻松获得这种灵活性。
[RoutePrefix("ThisAction")]
public class ThisActionController : Controller {
[HttpGet]
[Route("")] //Matches GET ThisAction
public ActionResult Index() {
//...
}
[HttpGet]
[Route("{programId:int}")] //Matches GET ThisAction/123
public ActionResult Index(int programId) {
//...
}
[HttpGet]
[Route("{programKey}")] //Matches GET ThisAction/ABC
public ActionResult Index(string programKey) {
//...
}
}
确保在 RouteConfig
中启用属性路由public class RouteConfig {
public static void RegisterRoutes(RouteCollection routes) {
//...other code removed for brevity
//Attribute routes
routes.MapMvcAttributeRoutes();
//convention-based routes
//...other code removed for brevity
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = "" }
);
}
}
该路由将与基于边约定的路由一起工作。
请注意,一旦在控制器上使用它,就必须在整个控制器上使用它。所以控制器要么全基于约定,要么全属性路由。