首页 > 代码库 > 使用HttpModule实现网址重写和HttpHandler实现页面静态化冲突的解决办法

使用HttpModule实现网址重写和HttpHandler实现页面静态化冲突的解决办法

使用HttpModule实现网址重写和HttpHandler冲突的解决办法
功能描述:
1. 用HttpModule做了一个重写URL的功能,实现所有访问html的请求要经过httpModule处理,如果页面中有对应的aspx页面,就转发到那个页面,如果没有,就转发到原来请求的那个页面。

2. 但后面有做了一个使用HttpHandler是aspx页面静态化的功能,实现访问某一类的页面的时候,如果没有就使用模板创建html页面,如果有,就访问已存在的页面。

3. 做完上面两步,使用html的方式访问aspx页面时没问题,但访问项目中已有的html页面就有问题了,不是html文件夹中的静态化页面不能访问,就是其他html页面无法访问。

对于这个问题,有以下几点应该注意:

1.httpModule页面中:

技能点1:判断是否存在对应的aspx页面。如果存在aspx页面,使用app.Context.RewritePath(newUrl)进行路径重写,这个不会与页面中的session冲突。
技能点2:判断没有aspx页面的html请求页面是否是html静态页面文件夹中的页面。如果不是直接转发到请求的页面,如果是,不进行处理,留给实现页面静态化的HttpHandler进行处理。
代码如下:

     public void BeginRequest(object sender, EventArgs e)        {            HttpApplication app = sender as HttpApplication;            //app.Response.Write("开始处理请求!");            //4.1 截获请求网址            string url = app.Request.RawUrl;            //4.2 判断网址是否符合要求,判断是否进行重发到指定页面            if (url.LastIndexOf(".html") > 0)            {                string newUrl = url.Substring(0,url.Length-4);                //确定存在对应的aspx页面才可以进行URl重写                if (File.Exists(app.Server.MapPath(newUrl + "aspx")))                {                    //转发到指定页面                    app.Server.Transfer(newUrl + "aspx");                }                else                {                    //如果没有对应的aspx页面,要再次判断是否为html文件夹下的静态页面                    //如果是静态页面的请求,不进行处理,如果不是进行转发                    //app.Response.Write(url.LastIndexOf("html/") > 0);                    if(url.LastIndexOf("html/")<= 0)                    {                        app.Server.Transfer(url);//转发请求的网址                    }                }            }        }

 

使用HttpModule实现网址重写和HttpHandler实现页面静态化冲突的解决办法