Asp.Net(三) Routing
其实在第一篇中就提到了 Routing.
public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); // 这是一个约束。 routes.MapRoute( "Default", // 路由名称 "{controller}/{action}/{id}", // 带有参数的 URL new { controller = "Home", action = "Index", id = "" }, // 参数默认值 new { id = @"[\d]*" } //id必须为数字 还可以加上约束 } ); }
上面 是Global.asax里面的 URL 访问规则.
public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( "Default", // 路由名称 "{controller}/{action}/{Year}/{Month}/{Day}", // 带有参数的 URL new { controller = "Blogs", action = "Archive", Year = "2008", Month = "", Day = "" } // 参数默认值 ); }
http://localhost:14593/Blogs/Archive/[Year]/[Month]/[Day]
这样 就支持了 这样的规则.
我不光是想自定义规则,同时还想自定义解析规则肿么办呢
public class MyPage:IHttpHandler { public RequestContext RequestContext { get; private set; } public MyPage(RequestContext context) { this.RequestContext = context; } public virtual void ProcessRequest(HttpContext context){ //这里面写解析的规则 //context.Server.Execute( RequestContext.RouteData.Values["page"].ToString().Replace("_","/")+".aspx" } public bool IsReusable { get { return false; } } } public class MyRouteHandler : IRouteHandler { #region IRouteHandler 成员 public IHttpHandler GetHttpHandler(RequestContext requestContext) { return new MyPage(requestContext); } }
调用
routes.Add(new Route("{page}.aspx", new MyRouteHandler()));
这个时候 就是执行 自定义的解析
IIS支持问题? 其实在IIS版本不同 方法也不用。 这个用到再看吧
PS:参考资料
http://blog.csdn.net/ITniao/article/details/4068930
http://www.cnblogs.com/chsword/archive/2008/08/27/System_Web_Routing_1.html
http://www.cnblogs.com/Terry-greener/archive/2011/10/27/2226602.html