這是我實現的HttpModule的:如何限制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類的 '初始化' 的方法。第一次方法在應用程序啓動時被調用...並且每個頁面請求調用模塊只有一次。
如果我趕緊做請求的頁面(第2請求將早於1日請求被處理後發送),那麼方法「初始化」另外幾個叫每個如下要求的網頁導致2-3呼叫我的模塊...
爲什麼?我怎麼能避免這種情況?
謝謝。
P.S.我已經將公共構造函數添加到HttpModuleRewriter中以計算引用的數量,並且在我的請求期間,我創建了5個模塊...並且對於頁面2的每個請求模塊實際上都被稱爲...但僅用於第一個導航頁面以下頁面(我檢查了3個其他頁面)模塊只被調用一次(僅調用1個實例)...
爲什麼第一頁被處理兩次?建議的答案(使用「初始化」標誌)也無濟於事。
所以,你認爲模塊初始化兩次或更多次都可以嗎? ......可能你是對的。謝謝。 – Budda 2011-04-01 21:51:10
但我想,你應該使用靜態變量'已初始化'的字段。 – Budda 2011-04-01 21:51:39
似乎asp.net應用程序創建一個新的模塊,如果沒有其他可用。如果您沒有將當前創建的模塊的ProcessRequest分配給app.BeginRequest,那麼以下嘗試調用模塊將不會像預期的那樣調用'ProcessRequest'方法...因此模塊將不會實際連接。建議的解決方案似乎不可行。 – Budda 2011-04-01 22:29:30