欢迎光临
  发起投票 | 发起主题  
2008-06-10
帖子数: 7
无等级(0)

 

今天发现一个好奇怪的现象,原来一直没有注意,今天程序出了问题后才发现问题的严重性。

我在一个小项目中用到 HttpModule

public class HttpModule : System.Web.IHttpModule
 {
   /// <summary>
  /// 实现接口的Init方法
  /// </summary>
  /// <param name="context"></param>
  public void Init(HttpApplication context)
  {
     context.BeginRequest += new EventHandler(ReUrl_BeginRequest);
   }

   /// <summary>
  /// 重写Url
  /// </summary>
  /// <param name="sender">事件的源</param>
  /// <param name="e">包含事件数据的 EventArgs</param>
  private void ReUrl_BeginRequest(object sender, EventArgs e)
  {

    ......

   HttpContext context = ((HttpApplication)sender).Context;

   string requestPath = context.Request.Path.ToLower();
           

   }

}

程序启动,在Login.aspx 开始调用的问题,发现一个这样的问题:

login.aspx会多次调用这个ReUrl_BeginRequest 方法,因为我跟踪的时候,发现

requestPath =  login.aspx

                     styles/dntmanager.css

                     JScript/common.js

                     images/login-top.gif

                     ..

TMD好奇怪。为什么这些图片css文件也会调用一次这个HttpModule中的beginRequest方法呢?

我的Login.aspx文件是这样的:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="login.aspx.cs" Inherits="GPRPWeb.aspx.login" %>

<%@ Register TagPrefix="cc1" Namespace="GPRP.GPRPControls" Assembly="GPRPControls" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
  <title>登录</title>
  <link href="../styles/dntmanager.css" rel="stylesheet" type="text/css" />

  <script type="text/javascript" src="../JScript/common.js"></script>
  <script type="text/javascript">
  if(top.location!=self.location)
   {
    top.location.href = "aspx/login.aspx";
   }
   
   
  </script>
</head>
<body style="background:#f4f6f7;">
 <form id="Form1" method="post" runat="server">
  <div id="LoginBar">
  <ul>
     <span class="td1">
    <asp:literal id="Msg" runat="server"></asp:literal>
       <br />
    <br />
    </span>
   <li class="LoginTop"><img src="../images/login-top.gif" alt=""/></li>
   <li class="FormNav">
    <dl>
     <dt><label><asp:literal id="lblUserName" runat="server"></asp:literal></label><cc1:textbox id="UserName" runat="server" RequiredFieldType="暂无校验" Text="" size="25" ></cc1:textbox></dt>
     <dd><label><asp:literal id="lblPwd" runat="server"></asp:literal></label><cc1:textbox id="PassWord" runat="server" RequiredFieldType="暂无校验" Text="" TextMode="Password" size="20"  ></cc1:textbox>
     <dd><label><asp:literal id="lblLanguage" runat="server"></asp:literal></label><cc1:DropDownList ID="dplLanguage" runat="server">
                        </cc1:DropDownList> 
     <dd><input id="login" type="submit" value="<%=submit%>" style="color:white;font-weight:bold;width:60px; height:26px; border:0; background:url(../images/button.gif) no-repeat left top; cursor:pointer; margin-left:65px;"></dd>
     
    </dl>
   </li>
   <li><img src="../images/login-bottom.gif" alt=""/></li>
  </ul>
  
  </div>
 
  </form>
 <div id="copyright"><%=footer%></div>  
 
 </body>
 
</html>

 

 

各位同行兄弟,请问我怎么解决,一个页只调用一次这个httpMoudle呢?

 

 

 


2008-07-08 14:38 第 1 楼 58.210.125.* 回复 | 引用 | 编辑 | | Top

2003-11-18
男
祝扫把生意兴隆,日进万金
帖子数: 6970
发帖数前10位(10)

 
你是在VS里面以web site方式运行的吧?如果在IIS里面,除非把GIF,CSS之些的加上ASP。NET的处理器,不然不会进入httpmodule里。

2008-07-08 14:41 第 2 楼 218.241.130.* 回复 | 引用 | 编辑 | | Top

2001-04-12
男
祝扫把生意兴隆,日进斗金
帖子数: 11715
发帖数前10位(2)

 
你是在VS里面调试的时候出现的吧?
VS里面的WebSite会默认处理所有http请求,而实际上,在IIS中,所有配置为aspnet_isapi.dll处理的页面(例如.aspx、.ashx等),HttpModule里面都会截获到!

openlab v3.0开发中

2008-07-08 14:48 第 3 楼 218.241.130.* 回复 | 引用 | 编辑 | | Top

2008-06-10
帖子数: 7
无等级(0)

 
是的,我是在VS里调试出现的.
你们的意思是说,如果我发布以后就不会出现这样的情况?
好像有点没有明白你们的意思.

有什么办法不让他去请求HttpModule,像GIF这些文件.

2008-07-18 20:44 第 4 楼 117.83.129.* 回复 | 引用 | 编辑 | | Top

2003-11-18
男
祝扫把生意兴隆,日进万金
帖子数: 6970
发帖数前10位(10)

 
VS里面没有办法,在IIS里面,就不会请求到了。

2008-07-19 20:48 第 5 楼 222.129.106.* 回复 | 引用 | 编辑 | | Top

  1. 主页
  2. »
  3. 论坛首页
  4. »
  5. 站务管理
  6. »
  7. Openlab技术
  8. »
  9. 问 HttpModule 中 BeginRequest 的问题了。
 



Powered By Openlab v3.0 (Debug Build: 1.3565) © 2008. 页面执行: 0.172秒. 内存使用: 175.9MB. 5 次数据库查询.