代码之家  ›  专栏  ›  技术社区  ›  Phil.Wheeler

如何解决ASP.NETMVC路由映射冲突?

  •  1
  • Phil.Wheeler  · 技术社区  · 15 年前

    public class MvcApplication : System.Web.HttpApplication
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    
        routes.MapRoute(
            "Project",
            "{controller}/{projectid}/{action}/{id}",
            new { controller = "Project", action = "Index", id = "" });
    
        routes.MapRoute(
            "Default",                                              // Route name
            "{controller}/{action}/{id}",                           // URL with parameters
            new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
        );
    
    }
    

    在大多数情况下,这些都不会带来问题,但我在尝试调用/Account/LogOn视图时遇到了麻烦。我的ActionLink语法如下所示(我尝试了几种变体,包括空路由值等):

    <%= Html.ActionLink("Log On", "LogOn", "Account") %>
    

    浏览此视图会引发404错误(“找不到资源”)。理想情况下,我希望避免大量的返工,那么什么是避免这些冲突的最佳方法呢?

    1 回复  |  直到 15 年前
        1
  •  1
  •   Tyler Jensen    15 年前

    你用控制器的文字试过这个变体吗?

    public class MvcApplication : System.Web.HttpApplication
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    
        routes.MapRoute(
            "Project",
            "Project/{projectid}/{action}/{id}",
            new { controller = "Project", action = "Index", id = "" });
    
        routes.MapRoute(
            "Default",                                              // Route name
            "{controller}/{action}/{id}",                           // URL with parameters
            new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
        );
    }
    

    这将抓住: http://localhost/Project/12 http://localhost/Project/12/Edit http://localhost/Project/2/View/2

    但它会过去的 http://localhost/Account/LogOn 到第二轮。对?

    推荐文章