Asp.net mvc MVC 3问题与一条路线

Asp.net mvc MVC 3问题与一条路线,asp.net-mvc,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.

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

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

您知道它选择此路由的原因吗?

匹配的路由将按照它们出现的顺序进行选择

移动

routes.MapRoute(“主页”,新的{controller=“Home”,action=“Index”})

向上,使它在上面


routes.MapRoute(“CategoryHome”,“categorynameurl}/”,新的{controller=“Categories”,action=“Index”})

匹配的路线按其出现的顺序进行选择

移动

routes.MapRoute(“主页”,新的{controller=“Home”,action=“Index”})

向上,使它在上面


routes.MapRoute(“CategoryHome”,“categorynameurl}/”,新的{controller=“Categories”,action=“Index”})

路线按添加顺序选择

将主页路径移动到CategoryHome路径上方

如果您的路由再次出现问题,Phill Haack可以使用此路由调试器工具:


另一个路由调试器存在于中。您应该尝试一个非常好的插件:

路由是按添加顺序选择的

将主页路径移动到CategoryHome路径上方

如果您的路由再次出现问题,Phill Haack可以使用此路由调试器工具:


另一个路由调试器存在于中。您应该尝试一个非常好的插件:

最后,我解决了为categorynameurl参数添加约束的问题:

routes.MapRoute("CategoryHome", "{categorynameurl}/", new { controller = "Categories", action = "Index" },new {categorynameurl = @"[a-z0-9\-]+$" });

最后,我解决了为categorynameurl参数添加约束的问题:

routes.MapRoute("CategoryHome", "{categorynameurl}/", new { controller = "Categories", action = "Index" },new {categorynameurl = @"[a-z0-9\-]+$" });

我觉得这不对劲。除非将{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/
与我们的空url路径->主页/索引匹配
http://localhost/abc123
与我们的foo路线->主页/foo匹配


@geertvdc提到了一些调试路由的好工具。你也应该测试它们。我写了一篇关于测试入站路由匹配和出站url生成的文章。

我觉得这不合适。除非将{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/
与我们的空url路径->主页/索引匹配
http://localhost/abc123
与我们的foo路线->主页/foo匹配

@geertvdc提到了一些调试路由的好工具。你也应该测试它们。我写了一篇关于测试入站路由匹配和出站url生成的文章