我对一条路线有一个问题:
这是我的global.asax:
routes.MapRoute("TagsHome", "belleza-y-{tagnameurl}/", new { controller = "Tag", action = "Detail" });
routes.MapRoute("CategoryHome", "{categorynameurl}/", new { controller = "Categories", action = "Index" });
routes.MapRoute("HomePage", "", new { controller = "Home", action = "Index" });
我的问题是,当我在http://localhost:4097/
上调试项目时,MVC正在使用的路由是:
routes.MapRoute("CategoryHome", "{categorynameurl}/", new { controller = "Categories", action = "Index" });
但应该使用主页:
routes.MapRoute("HomePage", "", new { controller = "Home", action = "Index" });
你知道为什么选择这条路线吗?
答案 0 :(得分:3)
路线按照添加顺序选择。
将您的主页路线移至CategoryHome路线上方。
如果您的路线出现问题,可以使用Phill Haack的路由调试工具: http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx
Glimpse中存在另一个路由调试器。一个非常好的插件你应该尝试:http://getglimpse.com/
答案 1 :(得分:1)
匹配路线按其出现的顺序选择。
移动
routes.MapRoute("HomePage", "", new { controller = "Home", action = "Index" });
up以上它
routes.MapRoute("CategoryHome", "{categorynameurl}/", new { controller = "Categories", action = "Index" });
答案 2 :(得分:0)
最后我解决了为categorynameurl参数添加约束的问题:
routes.MapRoute("CategoryHome", "{categorynameurl}/", new { controller = "Categories", action = "Index" },new {categorynameurl = @"[a-z0-9\-]+$" });
答案 3 :(得分:0)
这对我来说不合适。除非您已将{categorynameurl}参数指定为可选或通配符,否则它不应与路径匹配。
采取以下控制器:
public class HomeController : Controller
{
public ActionResult Index() {
return Content("index");
}
public ActionResult Foo(string foo) {
return Content("foo");
}
}
以下路线配置:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute("", "{foo}", new { controller = "Home", action = "Foo" });
routes.MapRoute("", "", new { controller = "Home", action = "index" });
}
http://localhost/
与我们的空网址相匹配 - >首页/索引
http://localhost/abc123
与我们的foo路线相匹配 - >主页/富
@geertvdc提到了一些用于调试路由的好工具。你也应该测试它们。我写了一篇关于测试入站路由匹配和出站网址生成here的帖子。