0

ASP .Net 自定义路由不起作用。

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        //default route
        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Account", action = "LogOn", id = UrlParameter.Optional } // Parameter defaults
        );

       //custom route
        routes.MapRoute(
         "Admin",
         "Admin/{addressID}",// controller name with parameter value only(exclude parameter name)
         new { controller = "Admin", action = "address" }
       new { addressID = @"\d+" }
     );
    }

    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutes(RouteTable.Routes);
    }


    public ActionResult address(int addressID = 0)
    {
     //code and redirection
    }

在这里,如果可能,我想隐藏 url 中的所有内容......就像我想尽可能隐藏操作名称和参数名称和值......建议我这样做的可能方法

就像我想要这样的 URL(基于优先级)
1.http://localhost:abcd/Admin
或 2.http://localhost:abcd/Admin/address
或 3.http://localhost:abcd/Admin/1
或 4.http://localhost:abcd/Admin/address/1

4

1 回答 1

1

供快速参考。

  • 自定义路由应该出现在默认路由之前。
  • 尝试将您的自定义路由命名为 null。 routes.MapRoute( null, // Route name...
  • 检查您的调用是否正确。
  • 如果您正在处理在初始加载时未收到参数的操作(例如分页),请确保您的参数可以为空 address(int? addressID) ,并且在您的自定义路由上应该是这样的

//custom route
    routes.MapRoute(
     null, //<<--- set to null
     "Admin/{addressID}",// controller name with parameter value only(exclude arameter name)
     new { controller = "Admin", action = "address" }
   //new { addressID = @"\d+" } <<--- no need for this because based from your example " 2.http: //localhost:abcd/Admin/address" the parameter can be null.
 );

谢谢

于 2013-03-07T10:30:43.300 回答