使用HttpModule实现网址重写和HttpHandler实现页面静态化冲突的解决办法
2014-09-18 11:04
483 查看
使用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进行处理。
代码如下:
功能描述:
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实现网址重写
- 使用HttpModule(给页面添加页头和页尾,重写URL)
- 解决Vue使用mint-ui loadmore实现上拉加载与下拉刷新出现一个页面使用多个上拉加载后冲突问题
- 页面重定向----使用HttpModule实现多个域名分别“绑定”到子目录
- 在ASP.NET中重写URL 方法二:使用HttpModule实现URL重写
- 使用HttpHandler 实现无页面退出和防止盗链
- ASP.NET:使用HttpModule(给页面添加页头和页尾,重写URL)
- 使用HttpServletResponseWrapper造成页面响应慢或者不响应解决办法
- 使用HttpURLConnection实现页面静态化工具类
- 关于使用ViewFlipper实现手势滑动切换及其与ScrollView冲突的解决办法
- 在ASP.NET中重写URL 方法三:在IIS7中使用HttpModule 实现无扩展名的URL重写
- URL重写之在IIS7中使用HttpModule,在IIS5和IIS6中使用 ISAPIRewrite实现无扩展名的URL重写(节选自福娃儿)
- ASP.NET:使用HttpModule(给页面添加页头和页尾,重写URL)
- 使用 HttpModule 执行 URL 重写的时机选择
- 在Asp.Net中使用HttpModule实现多个域名分别“绑定”到子目录
- 在 ASP.NET 中使用 HTTPHandler 实现 Front Controller
- 使用HttpHandler实现URL重写
- 使用HttpHandler实现URL重写
- 使用HttpModule实现多个域名分别“绑定”到子目录