【发布时间】:2011-04-01 21:01:16
【问题描述】:
这是我对 HttpModule 的实现:
带模块的文件:
public class HttpModuleRewriter : IHttpModule
{
#region IHttpModule
public void Init(HttpApplication app)
{
app.BeginRequest += ProcessRequest;
}
public void Dispose()
{
}
#endregion
#region Protected Methods
protected void ProcessRequest(object sender, EventArgs e)
{
...
}
}
web.config:
<?xml version="1.0"?>
<configuration>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<add name="HttpModuleRewriter" preCondition="managedHandler" type="HttpModuleRewriter" />
</modules>
</system.webServer>
</configuration>
我在 HttpModuleRewriter 类的“Init”方法中设置了断点。应用程序启动时调用 1st time 方法...并且每个页面请求仅调用一次模块。
如果我对页面进行快速请求(第二个请求将在第一个请求处理之前发送),那么方法“Init”会被额外调用很少,并且对页面的每个后续请求都会导致对我的模块进行 2-3 次调用...
为什么?我该如何避免呢?
谢谢。
附:我已将公共构造函数添加到 HttpModuleRewriter 以计算引用量,在我的请求期间,我创建了 5 个模块......并且对于页面的每个请求实际上调用了 2 个模块......但仅适用于第一个导航页面,对于所有以下页面(我检查了其他 3 个)模块仅调用一次(仅调用 1 个实例)...
为什么第一页被处理了两次?建议的答案(使用“初始化”标志)也无济于事。
【问题讨论】:
标签: c# asp.net httpmodule