0

我有一個自定義的重寫模塊,當特定的查詢字符串參數通過時,我需要能夠調用server.transfer而不是response.redirect由於保存軟件和跟蹤Server.Transfer不會觸發應用程序生命週期事件

在RewriteModule的Init事件

我註冊的事件:

的BeginRequest 的PreRequestHandlerExecute ReleaseRequestState

當一個Response.Redirect的被稱爲ReleaseRequestState事件實際上是調用和重寫模塊併發症ETE和新的控制URL的設置

當Server.Transfer方法被調用,然後不叫ReleaseRequestState事件和友好的URL沒有設置

我想我明白一個Response.Redirect的和服務器之間的不同.Transfer,但我不明白爲什麼事件實際上不會被調用 - Session.End或Session.Abandon事件被調用,並且這個事件永遠不會被解僱?或者是完全不同的東西在這裏發生

感謝

保羅

回答

0

我猜這是兩者之間的細微差別。

的Response.Redirect做一個客戶端的重定向 - 這意味着客戶端瀏覽器發送一條消息,告訴它來請求一個不同的URL,因此給你一個新的請求。

Server.Transfer的不創建一個新的請求(http://msdn.microsoft.com/en-us/library/y4k58xk7.aspx)。它只是停止在當前頁面上工作,並開始在另一頁上工作 - 沒有新的請求。

+0

嗨感謝回去我 - 如果沒有新的請求,那麼它肯定會再繼續撥打PostReleaseState eventrather不僅僅是查殺要求? – stack72 2010-07-26 12:54:16

+0

似乎應該。除非管道內部發生了一些魔法,才能知道國家是否被收購。如果沒有獲得狀態(如.css請求),也許框架不會調用ReleaseRequestState。只是猜測 - 我不知道這個事實。 – PatrickSteele 2010-07-26 13:08:36

相關問題