Asp.net mvc MVC Route Map在Html.RenderAction上出现异常:Route表中没有与提供的值匹配的路由

Asp.net mvc MVC Route Map在Html.RenderAction上出现异常:Route表中没有与提供的值匹配的路由,asp.net-mvc,routing,asp.net-mvc-5,Asp.net Mvc,Routing,Asp.net Mvc 5,我使用ASP.NET MVC 5,这是除主页/索引外所有操作的路线图: 对于第一页:Home/Index,我不想使用{randomNumber} 因此,我认为第一个解决方案是: routes.MapRoute( name: "Default", url: "{controller}/{action}", defaults: new { controller = "Home", action =

我使用ASP.NET MVC 5,这是除主页/索引外所有操作的路线图:

对于第一页:Home/Index,我不想使用{randomNumber}

因此,我认为第一个解决方案是:

routes.MapRoute(
                 name: "Default",
                 url: "{controller}/{action}",
                 defaults: new { controller = "Home", action = "Index" }
            );
这个路由图解决了我的问题,但导致了另一个问题,那就是:客户端可以在没有{randomNumber}的情况下访问其他操作,但我只希望访问主控制器的索引操作而不使用随机数

另一种解决办法是:

  routes.MapRoute(
                     name: "Default",
                     url: "Home/Index",
                     defaults: new { controller = "Home", action = "Index" }
                );
但是有了这个映射,我不能用根url访问Home/index,我需要用根url访问Home/index,如下所示:www.mydomainaddress.com

最后我发现:

   routes.MapRoute(
                     name: "Default",
                     url: "",
                     defaults: new { controller = "Home", action = "Index" }
                );
但是我得到了一个例外:route表中没有与提供的值匹配的路由。在这一行的index.cshtml文件上:@{Html.RenderActionArchiveList,Home;}

我不知道我添加的路线图和渲染助手之间的关系

但如果我同时添加以下两个路线图,一切都会正常:

   routes.MapRoute(
                     name: "Default",
                     url: "",
                     defaults: new { controller = "Home", action = "Index" }
                );

 routes.MapRoute(
               name: "HomeActions",
               url: "Home/{action}",
               defaults: new { controller = "Home" }
           );
但我不能添加第二条地图路线,因为你知道我需要使用随机数访问所有操作

我无法理解添加默认贴图时发生了什么,以及与RenderAction helper有什么关系


有人知道这件事吗?有什么建议吗?

我已经在MVC5中使用了这种语法,它可以工作:

        routes.MapRoute(
            name: "HomePage",
            url: "",
            defaults: new { controller = "Home", action = "Index" }
            );
此语法允许您使用www.mydomainaddress.com访问您的主页,但如果您尝试使用www.mydomainaddress.com/home/index,则无法使用此语法

我不明白为什么它不适合你。您可以尝试重新调整顺序或MapRoutes定义,将主页路由放置在randomNumber路由之后

我看到了你修改过的问题。我知道您希望能够对home controller使用任何操作,但不希望对HomeController使用随机数

这可能更适合您,也可以为主控制器禁用randomNumber路由:

        routes.MapRoute(
               name: "HomePage",
               url: "",
               defaults: new { controller = "Home", action = "Index" }
          );

        routes.MapRoute(
                name: "HomeActions",
                url: "Home/{action}",
                defaults: new { controller = "Home", action = "Index" }
            );

        routes.MapRoute(
           name: "randomNumber",
           url: "{controller}/{randomNumber}/{action}",
           defaults: new { },
           constraints: new { randomNumber = @"\d+", controller = @"^((?!Home).)*$" }
       );

我得到了这个例外:route表中没有任何路由与提供的值匹配。你能发布你的整个RouteConfig类吗?我用你的答案更新问题,在home Controller中访问的其他操作没有随机数,我在问题中提到过我不想访问。
        routes.MapRoute(
               name: "HomePage",
               url: "",
               defaults: new { controller = "Home", action = "Index" }
          );

        routes.MapRoute(
                name: "HomeActions",
                url: "Home/{action}",
                defaults: new { controller = "Home", action = "Index" }
            );

        routes.MapRoute(
           name: "randomNumber",
           url: "{controller}/{randomNumber}/{action}",
           defaults: new { },
           constraints: new { randomNumber = @"\d+", controller = @"^((?!Home).)*$" }
       );