当前位置 > 首页 > Asp.net

asp.net路由配置2

2012-9-10 15:32:00来源:Asp.net

1:现在Application_start中注册您写的路由模式代码如下:
   void Application_Start(object sender, EventArgs e)
        {
             //注册所有的您设置的所有的路由规则,以便请求相应路径时去对应相应的规则,RouteTable类存储了所有规则的URL的路径,
            //RouteTable.Routes的是一个集合RouteCollection,存储了所有的用户定义的路由规则,写在Application_Start方法中的原因是将所有的路由规则注册到程序中
            RegisterRoutes(RouteTable.Routes);

        }


  public static void RegisterRoutes(RouteCollection routes)
        {
            //添加一个路由到程序中
            //new Route("{page}.aspx", new MyRouteHandler())d的解析,"{page}.aspx",第一个参数是请求的路径,第二个参数是怎么样去处理这个请求。
            //在这里是用MyRouteHandler去处理这个路由请求
          

            //添加另一个路由
            routes.Add("Default",
                new Route("{category}/{action}.aspx",
                          new RouteValueDictionary(
                              new
                                  {
                                      file = "Default",
                                      category = "home",
                                      action = "index"
                                  }), new MyRouteHandler()//这里定义一个routeHandler,要用这个handler去出来的的请求路径
                    )
                );
           
        }
2:定义一个RouteHandler来处理上面的请求路径
  public class MyRouteHandler : IRouteHandler
    {
        #region IRouteHandler 成员
        public IHttpHandler GetHttpHandler(RequestContext requestContext)
        {
            //返回一个请求的对象(IHttpHander),即请求的页面对象,在MyPage中得到当前请求对象信息,并处理请求路劲。
            return new MyPage(requestContext);
        }
        #endregion

    }
3:定义一个IHttpHandler的实现对象MyPage
   public class MyPage : IHttpHandler
    {

        public RequestContext RequestContext { get; set; }

        public MyPage(RequestContext context)
        {
            this.RequestContext = context;
        }

        #region IHttpHandler 成员

        //处理请求的url方法,也就是去替换请求路径当中的相应的参数
        public virtual void ProcessRequest(HttpContext context)
        {
           
            context.Server.Execute(string.Format("/{0}.aspx?category={1}&action={2}",
              RequestContext.RouteData.Values.ContainsKey("file")
                ? RequestContext.RouteData.Values["file"].ToString()
                : "default",
              RequestContext.RouteData.Values.ContainsKey("category")
                ? RequestContext.RouteData.Values["category"].ToString()
                : "",
              RequestContext.RouteData.Values.ContainsKey("action")
                ? RequestContext.RouteData.Values["action"].ToString()
                : "")
                );

        }

        public bool IsReusable
        {
            get {