【问题标题】:Defining multiple static routes and 1 dynamic route for 1 controller in .NET MVC在 .NET MVC 中为 1 个控制器定义多个静态路由和 1 个动态路由
【发布时间】:2018-02-08 05:39:19
【问题描述】:

我定义了几个静态路由,如下所示:

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

第三个是动态路由,如下所示:

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

我想为我的索引控制器定义这两个静态路由:

/Index/Tutorials
/Index/LogOut

所有其他路线都应指向:

/Index/{id}

我现在定义它的方式适用于 2 个静态路由,但是当我尝试传递这样的参数时,它不是以下两个静态路由之一:

http://localhost:60617/Index/12345/

其中 12345 是 ID,我收到以下错误:

The resource cannot be found.

如何正确定义这些路线?有人可以帮帮我吗?

这里是路由类:

   public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");


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

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
        routes.MapRoute(
                  name: "Index",
                  url: "Index/{id}",
                  defaults: new { controller = "Index", action = "Index" }
                  );
        routes.MapRoute(
          name: "ResetPwdRoute",
          url: "{controller}/{action}/{id}",
          defaults: new { controller = "User", action = "ResetPwd", id = UrlParameter.Optional }
        );


    }
}

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-5 routing asp.net-mvc-routing


    【解决方案1】:

    您绘制路线的顺序很重要。

    应在更具体的路由之后映射通​​用路由以避免路由冲突。

    public class RouteConfig {
        public static void RegisterRoutes(RouteCollection routes) {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    
            routes.MapRoute(
                name: "LogOutRoute",
                url: "Index/LogOut",
                defaults: new { controller = "Index", action = "LogOut" }
            );
    
            routes.MapRoute(
                name: "Tutorials",
                url: "Index/Tutorials",
                defaults: new { controller = "Index", action = "Tutorials" }
            );
    
            routes.MapRoute(
                name: "Index",
                url: "Index/{id}",
                defaults: new { controller = "Index", action = "Index" }
            );
    
            routes.MapRoute(
              name: "ResetPwdRoute",
              url: "User/ResetPwd/{id}",
              defaults: new { controller = "User", action = "ResetPwd", id = UrlParameter.Optional }
            );
    
            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }
    }
    

    【讨论】:

    • 还应该注意,这种情况下的ResetPwdRoute 完全没有意义,因为Default 路由无论如何都会处理这种情况。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多