使用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") > )
{
string newUrl = url.Substring(,url.Length-);
//确定存在对应的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/")<= )
{
app.Server.Transfer(url);//转发请求的网址
}
}
}
}
使用HttpModule实现网址重写和HttpHandler实现页面静态化冲突的解决办法的更多相关文章
- ASP.NET关于书籍详情和删除的Demo(HttpHandler进行页面静态化[自动生成html网页]+Entity Framework通过类创建数据库+EF删查)
这次的Demo如标题所示, 首先第一步EF创建数据库 创建两个类,一个是图书类,一个是图书类别的类 using System; using System.Collections.Generic; us ...
- ASP.NET使用HttpHandler进行页面静态化(自动生成页面)
这次的Demo是,一个根页面,点击链接创建子页面,子页面都是一个Template页面进行替换的 一个根页面 <%@ Page Language="C#" AutoEventW ...
- 使用HttpModule实现网址重写
1. 修改配置文件: <httpModules> <</span>add name="html" type="HttpModule&quo ...
- IIS 10.0 无法安装 URL rewrite重写模块 2.0解决办法
[问题描述]系统升级到Windows10后,IIS是10.0的,发现无法安装 URLRewrite重写模块 2.0. [解决办法]打开注册表编辑器,在HKEY_LOCAL_MACHINE\SOFTWA ...
- 使用一个HttpModule拦截Http请求,来检测页面刷新(F5或正常的请求)
在Web Application中,有个问题就是:“我怎么来判断一个http请求到底是通过按F5刷新的请求还是正常的提交请求?” 相信了解ASP.NET的人知道我在说什么,会有同感,而且这其实不是一个 ...
- Could not load type System.ServiceModel.Activation.HttpModule解决办法
等注册完成后网站就可以打开了. win2008下提示未能从程序集“System.ServiceModel, Version=3.0.0.0问题解决 在Windows Server 2008中的IIS服 ...
- 配置IIS提示打开目录浏览时的问题:未能从程序集“System.ServiceModel, Version=3.0.0.0”中加载类型“System.ServiceModel.Activation.HttpModule” 的解决办法
错误消息: 未能从程序集“System.ServiceModel, Version=3.0.0.0”中加载类型“System.ServiceModel.Activation.HttpModule” 的 ...
- 网站title标题被改并被百度网址安全中心提醒的解决办法
国庆假日期间我们Sine安全接到众多网站站长求助网站标题被改导致在百度搜索中百度安全中心提醒被拦截,导致网站正常用户无法浏览网站被跳转到一些菠菜du博网站,而且很明显的一个特征就是在百度中搜索关键词的 ...
- Asp.Net通过HttpModule实现URL重写
首先总结一下为什么要对URL进行Rewrite,比如我可以把/Default.aspx?param=3替换成/Home/Default/3(类似mvc). 一.缩短url,隐藏实际路径提高安全性; 二 ...
随机推荐
- numpy里的randn
这个函数的作用就是从标准正态分布中返回一个或多个样本值.什么是标准正态分布 来源:http://www.360doc.com/content/17/0306/13/32342759_634411464 ...
- xcode编译失败
iPhone自动化需要使用WDA.经过一段时间,再次编译,会出现WDA编译失败的问题,提示 The operation couldn't be completed. Unable to log in ...
- Lua C++互传结构体实例
转自:http://bbs.csdn.net/topics/350261649 =====main.cpp======= #include "stdio.h" extern &qu ...
- java的super和this关键字用法总结
------super关键字------ super用途:在子类中访问超类“被隐藏的成员变量(无论是否静态)和静态方法”以及“被重写的实例方法”.这里的超类必须是“直接 ...
- HIbernate编程模型
1.Hibernate: ORM框架,简化SQL开发,编程接口丰富,简化JDBC编程 2.有点: Lazy机制配合Fetch的HQL高级查询,提高开发效率 难点:理解Lazy与Fetch JOIN的原 ...
- treap Python实现
# coding=utf-8 # treap(树堆)Python实现 import random def preorder_tree_walk(node): if node: print node.k ...
- springboot实现国际化
1.编写配置文件 2.在application.properties中添加 i18n指的是国际化所在包名 3.实现国际化的接口 4.在配置类中
- springboot - SqlSessionFactoryBean falls in circular dependencies by Spring Boot's DataSourceInitializer
springboot mybatis配置多数据源的时候,报错:There is a circular dependency between 7 beans in the application con ...
- SpringMvc 获取ApplicationContext
有时,我们不通过Controller层进入Service层,比如同步数据,任务,以及文件上传共通Handler对文件处理后保存数据等都会由一个非Controller类调用Service. 这时候如果n ...
- 更改maven下载jar的仓库为阿里云仓库
修改settings.xml <!-- 配置本地maven的仓库 --> <localRepository>D:\file\path\maven\repository</ ...