地址重写中使用httpModule映射.htm的问题
2010-03-19 14:02
218 查看
需求描述:
IIS6.0(windows2003)中配置.htm到asp.net2.0扩展.
需要根据用户是否修改了配置信息来生成用户首页(index.htm),为避免每一步改变后都进行一次生成操作,打算采用按访问生成的形式. 即在HttpModule中截获请求的页面,去数据库中获取当前请求页面是否改变过(即是否需要生成,每一步改变都会将数据库中的需要更新设置成true)如过页面已经改变则更新页面.但是问题就来了
问题描述:
1.随便输入一个http://www.wow52.cn/1134.htm时发现服务器相应缓慢,调试时发现这个请求会在服务器端不停的反复发送,导致死循环.
2.输入实际存在的地址也回导致死循环.
可行的解决办法:
1:设置 Response.Expires=x,其实无论设置成什么多可以(负数,零,正数),设置CacheControl或ExpiresAbsolute也一样可以解决这个问题,我这里设置了 Context.Response.Cache.SetCacheability(HttpCacheability.Private);这个本是默认设置,但是设置一下后就可以正常运做了.
2.自己判断.htm文件是否存在(如果是目标文件不存在则先进行生存操作,如果不是目标文件则抛出404错误),并使用Transfer进行处理,大致代码如下(HttpModule内部):
if (Context.Request.PhysicalPath.IndexOf(".htm") > 0)
{
//****方案一 设置下面的任意一个或多个****/
//Context.Response.ExpiresAbsolute = DateTime.Now.AddSeconds(10.0);
//Context.Response.Expires = 100;
//Context.Response.CacheControl = "private";
//Context.Response.Cache.SetCacheability(HttpCacheability.Private);
//******End 方案一 ************/
//****方案二 判断文件存不存在以及使用Transfer****//
if (!File.Exists(Context.Request.PhysicalPath))
{
throw new HttpException(404, "文件不存在!");
}
Context.Server.Transfer(_url);
//Context.RewritePath(_url);//--照样出现死循环
//Context.Server.Execute(_url);//--输出两次
//****End 方案二************//
}
方案三:
自己实现一个.htm处理程序来捕获需要的请求,考虑上面的需求描述这种方式应该是最合适的
十分怪异,望知情者告知
相关文章推荐
- 地址重写中使用httpModule映射.htm的问题
- 使用HttpModule实现网址重写
- URL重写之在IIS7中使用HttpModule,在IIS5和IIS6中使用 ISAPIRewrite实现无扩展名的URL重写(节选自福娃儿)
- 在ASP.NET中重写URL 方法二:使用HttpModule实现URL重写
- MFC 对于使用自己的线进行启动其他进程的虚拟地址映射问题
- 在ASP.NET中重写URL 方法三:在IIS7中使用HttpModule 实现无扩展名的URL重写
- 使用HttpModule(给页面添加页头和页尾,重写URL)
- WCF Rest:不使用UriTemplate使用post方式传参解决HTTP400问题以及参数映射问题
- 使用 HttpModule 执行 URL 重写的时机选择
- 使用Nginx代理,HttpContext.Current.Request.Url.Host.ToString()获取地址是原地址的问题。
- 使用HttpModule实现网址重写和HttpHandler实现页面静态化冲突的解决办法
- ASP.NET:使用HttpModule(给页面添加页头和页尾,重写URL)
- ASP.NET:使用HttpModule(给页面添加页头和页尾,重写URL)
- nginx的基本使用和反向代理,地址重写问题
- 使用 HttpModule 执行 URL 重写的时机选择
- WCF Rest:不使用UriTemplate使用post方式传参解决HTTP400问题以及参数映射问题
- 利用自定义IHttpModule来实现URL地址重写
- 在IIS7下使用HttpModule的过程中遇到很诡异的问题,HttpContext.Current.User为NULL
- IIS7地址重写URL Rewrite Module的使用
- Windows下安装Apache HTTP Server 无法启动遇到OS10048 通常每个套接字地址(协议/网络地址/端口)只允许使用一次 的问题解决方法