遗忘海岸

江湖程序员 -Feiph(LM战士)

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

地址重写中使用httpModule映射.htm的问题

 

 需求描述:

  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处理程序来捕获需要的请求,考虑上面的需求描述这种方式应该是最合适的

 

十分怪异,望知情者告知

posted on   遗忘海岸  阅读(356)  评论(0编辑  收藏  举报

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示