• 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的路径,但是我的运行程序时报如下错误,望有实现成功的帮忙解决,不胜感激!
    错误页面:

  • 相关阅读:
    openstack nova 基础知识——Quota(配额管理)
    02python注释
    01使用Pycharm编写第一个python程序
    35Angular实现一个todoList
    34Angular实现搜索缓存数据功能
    33Angular实现人员登记系统(表单元件的双向数据绑定)
    32练习
    31封装一个网络请求的服务
    30服务(练习)
    29服务
  • 原文地址:https://www.cnblogs.com/Minghao_HU/p/2678818.html
Copyright © 2020-2023  润新知