一条路线的MVC 3问题

时间:2011-06-24 10:48:55

标签: asp.net-mvc

我对一条路线有一个问题:

这是我的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" });

你知道为什么选择这条路线吗?

4 个答案:

答案 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的帖子。