ASP.NET MVC中的路由IRouteConstraint方法應用實例
阿新 • • 發佈:2018-05-09
http col spa Go clas .aspx direct lec rep
在如下代碼的寫法中:
public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapPageRoute("Report", "report", "~/Content/page/report.aspx")
routes.MapRoute( name: "BaseManage", url:"Admin/BaseManage/{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } );
routes.MapRoute( name: "Order", url: "Admin/OrderManage/{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } );
routes.MapRoute( name:"Admin", url: "Admin/{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } );
routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } );
}
}
因為系統需要,方法RegisterRoutes中同時應用了MapPageRoute和MapRoute方法,這樣寫的後果就是所有的頁面加載時都跳轉到了WEBFORM頁面中,導致系統報錯。
報錯原因是兩種不同的方式之間有沖突,解決這個問題,需要給MapPageRoute加個約束,這時就用到了IRouteConstraint接口,看如下代碼:
public class MyCustomConstraint : IRouteConstraint { public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection) { return routeDirection == RouteDirection.IncomingRequest; } }
然後按如下修改語句即可
//routes.MapPageRoute("Report", "report", "~/Content/page/report.aspx"); routes.MapPageRoute("Report", "report", "~/Content/page/report.aspx", true, null, new RouteValueDictionary { { "outgoing", new MyCustomConstraint() } });
ASP.NET MVC中的路由IRouteConstraint方法應用實例