2009-09-04 40 views

回答

3

Server.Transfer只能發生在單個HttpContext上。每個虛擬目錄或應用程序都有自己的HttpContext對象,他們不知道它們是共存的!所以你不能那樣做。

9

首先,使用Server.Transfer轉移到另一個頁面可節省服務器資源。而不是告訴瀏覽器重定向,它只是改變Web服務器上的「焦點」並傳輸請求。這意味着你不會收到很多HTTP請求,因此可以減輕Web服務器的壓力,並使應用程序運行得更快。

但要小心:因爲「傳輸」進程只能在服務器上運行的站點上運行,所以不能使用Server.Transfer將用戶發送到外部站點。只有Response.Redirect可以做到這一點。

其次,Server.Transfer在瀏覽器中保留原始URL。這可以真正幫助簡化數據輸入技術,儘管在調試時可能會造成混淆。

來源:Server.Transfer vs. Response.Redirect

因此,在短暫的:Response.Redirect的只是告訴瀏覽器訪問另一個頁面。 Server.Transfer有助於減少服務器請求,使URL保持不變,並且通過一些小小的錯誤處理,可以傳輸查詢字符串和表單變量。

  • Response.Redirect更加用戶友好,因爲網站訪問者可以爲他們重定向到的頁面添加書籤。
  • 被轉移的頁面對客戶端來說顯示爲不同於實際的url。這意味着如果您從其他目錄轉移到頁面,則相關鏈接/圖像路徑等內容可能無法正常工作。
  • Server.Transfer有一個可選參數,用於將表單數據傳遞到新頁面。
  • 自發布版本以來,這不再有效,因爲Viewstate默認情況下具有更高的安全性(EnableViewStateMac默認爲true),因此新頁面無法訪問表單數據。您仍然可以通過請求原始處理程序訪問新頁面中原始頁面的值:
+0

Server.Transfer也有一個問題。如果您轉移到完全不同的路徑,您可能會破壞其他文件依賴關係。 – 2009-09-04 08:10:24

0

會話不在服務器之間共享,因此會是一個大問題。

5

的Server.Transfer的()只適用於一個web應用中。

使用Transfer,請求的「處理」在內部(到Web服務器/應用程序)傳遞到另一個頁面,所以Request對象保持不變。這意味着處理需要停留在Web應用程序中。

如果您想讓處理在另一個Web應用程序上繼續,那麼您將需要一個新的請求。這意味着您需要讓瀏覽器發出其他請求,因此您需要一個Response.Redirect。

+0

感謝漢斯。這很清楚。 – 2009-09-09 10:09:31

相關問題