asp.net路由配置2

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 { return false; }
        }
        #endregion
    }
 
4:并且在Web.config中system.webServer的节点下配置如下
   <modules>
      <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
    </modules>
    <handlers>
      <add name="MyPage" path="*" type="RouteSimple.IHttpHander.MyPage" verb="*"/>
    </handlers>
 
做完以上路由配置,理论上说路由配置已经完成。
访问路径/a/b/Defaul.aspx就是访问Default.aspx?category=a&action=b的路径,但是我的运行程序时报如下错误,望有实现成功的帮忙解决,不胜感激!
错误页面:

原文地址:https://www.cnblogs.com/Minghao_HU/p/2678818.html