使用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);//转发请求的网址
                    }
                }
            }
        }
时间: 2024-10-10 20:45:37

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

使用HttpModule实现网址重写

1.  修改配置文件: <httpModules> <</span>add name="html" type="HttpModule"/> </httpModules> 2.  编写HttpModule类: using System; using System.Collections.Generic; using System.Linq; using System.Web; ///URL重写 的摘要说明 ///1.创建

未能从程序集“System.ServiceModel, Version=3.0.0.0”中加载类型“System.ServiceModel.Activation.HttpModule” 的解决办法

错误消息: 未能从程序集“System.ServiceModel, Version=3.0.0.0”中加载类型“System.ServiceModel.Activation.HttpModule” 的解决办法 解决办法: 1, 若要解决该问题,请在 Visual Studio 2010 命令提示符下运行下面的命令行: aspnet_regiis.exe -i -enable 如果出现以下错误的时候我们就用方法2.. PM> aspnet_regiis.exe -i -enable无法将“aspn

使用一个HttpModule拦截Http请求,来检测页面刷新(F5或正常的请求)

在Web Application中,有个问题就是:“我怎么来判断一个http请求到底是通过按F5刷新的请求还是正常的提交请求?” 相信了解ASP.NET的人知道我在说什么,会有同感,而且这其实不是一个很easy的问题.那是因为HTTP协议无状态的特性不允许请求之间保持状态. 我想大多数人关注这个问题是因为,页面post的时候或之后,不想浏览器重复提交. 所以问题可以简化为:“我怎么来判断一个POST请求到底是由F5按钮触发的还是正常的页面交互?” 幸运的是,这时候DOM的一个简单细节可以用来解决

zblog2.3的缺点:纯静态化无法实现栏目名加id的网址结构[图]

写博客应半年了,因为对程序语言比较感兴趣,因此也关注博客系统的发展,对于国内博主来说,ZBLOG似乎是最佳的选择,功能比较完善,也比较好修改模板,当然,你还需要写CSS代码,模板里面基本都用标签完成的,这基本就是模块儿化设计了,确实比较方便.去年我开始建自己的博客时,zblog-asp程序还只是2.2版本,静态化中心的功能并不好用,尤其是纯静态化的网址非常不美好,这对于我们这种有强迫症的人非常不舒服,因此选择了采用插件完成纯静态化功能,生成纯静态的html网页,虽然要麻烦一点,但是也没有办法,这

网站title标题被改并被百度网址安全中心提醒的解决办法

国庆假日期间我们Sine安全接到众多网站站长求助网站标题被改导致在百度搜索中百度安全中心提醒被拦截,导致网站正常用户无法浏览网站被跳转到一些菠菜du博网站,而且很明显的一个特征就是在百度中搜索关键词的网站快照标题被修改成了一些与网站本身内容不相关的页面,而且发现网站首页文件如index.php或index.html被增加了一些可疑的加密代码. 上述图片中所显示的就是标题被修改所收录的快照页面并被百度网址安全中心提醒该页面可能存在违法信息!对此我们Sine安全立即安排了网站安全审计部门进行深入的网

输入百度网址地址后面有tn小尾巴解决办法

最近在地址栏输入百度网址进行搜索时,浏览器总是自动把地址补全并且后面加上一个 tn=99135173这类的小尾巴,十分恶心. 网上也搜索了一些解决办法,但是都没有根治. 由于使用的是360浏览器,想会不会是浏览器设置的问题. 把“启用智能网址”选项去掉,再输入网址就不会有有小尾巴了. 原文地址:https://www.cnblogs.com/andy-2014/p/11143419.html

Google浏览器主页被篡改(目标里没有网址)的解决办法--亲测有效

关于点开浏览器,主页被篡改(劫持),网上很多解决办法,大部分是说点开快捷方式的属性查看“目标”的值最后是否有网址,有网址的删除网址就可以了.但是我遇到的情况却不是 那样的,在Google浏览器里面设置一些东西也没有用. 最后在网上也找到一种解决办法--右键快捷方式,打开文件所在位置,然后修改那个名字,比如把chrome.exe修改成chrome_new.exe,然后发送到桌面快捷方式就可以了.一开始我也不相信这种解决办法,但是弄了很久却搞不好,只能抱着试一试的心态去试验,结果却可以了.遇到这种情

ASP.NET应用程序生命周期趣谈(四) HttpHandler和页面生命周期

在之前的三篇文章中,我们还算简明扼要的学习了asp.net的整个生命周期,我们知道了一个Request进来以后先去ISAPI Filter,发现是asp.net程序后又ASPNET_ISAPI.dll这个ISAPI Extension来进行处理.在ASPNT_ISAPI创建了Worder Process后,在管道中经过HttpModule的处理来到HttpHander的手中. 我们知道P_Handler程序员使用“乾坤大挪移”对页面进行了处理后又通过管道中的HttpModule把response

重写dispatchKeyEvent方法 按返回键back 执行两次的解决办法

重写dispatchKeyEvent方法 按返回键back 执行两次的解决方法 @Override   public boolean dispatchKeyEvent(KeyEvent event) {           if(event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.getAction() != KeyEvent.ACTION_UP) {//不响应按键抬起时的动作                //TODO 代码