2010-03-25 31 views

回答

2

Server.Transfer()只適用於來自您網站的頁面,這意味着服務器開始從頭開始渲染新頁面。

Response.Redirect()是一個正常的重定向,它適用於任何URL。

12

Response.Redirect向客戶端發送'302 Moved Temporarily'響應,客戶端瀏覽器將向該位置發出請求。

Server.Transfer將控件從服務器端的一個頁面傳輸到另一個頁面,因此原始請求和響應緩衝流保持原樣,因爲它們位於傳輸完成的位置。

這意味着Response.Redirect需要往返客戶端,但Server.Transfer不需要。另一個區別是Server.Transfer在瀏覽器中顯示爲原始url ...例如考慮Page1.aspx做一個server.transfer page2.aspx,在這種情況下,Page1.aspx顯示在地址欄中,即使它們實際上正在顯示Page2.aspx。如果改爲Page1.aspx做了Response.Redirect,那麼Page2.aspx就會顯示出來。

所以取決於你想要優化的Response.Redirect更好,如果你想支持正確的頁面書籤和Server.Transfers更好,如果你想最大限度地減少客戶端往返服務器。

噢,還有退房http://www.csharpfriends.com/Articles/getArticle.aspx?articleID=15 它描述了這個要好得多的警告。

+0

真棒的答案! 我看到它的方式, Server.Transfer處理服務器端的請求 Response.Redirect從客戶端再次往返 – 2010-03-25 10:36:10

+1

實際上,'Response.Redirect'發出一個「302 Moved Temporarily」。 304是「未修改」,它告訴瀏覽器使用它的緩存版本,否則發現。作爲一個興趣點,ASP.NET 4引入了「Response.RedirectPermanent」,它發佈了「301永久移動」。 – 2010-03-25 11:34:23

+1

@Zhaph,關於.RedirectPermanent的詳細信息。做一個301並不是那麼多的代碼行,但一個捷徑仍然很好。 – 2010-03-25 23:35:10

-2

Server.Transfer爲您提供了將參數值設置到目標頁面的選項。

0
Response.Redirect should be used : 

  • 如果我們想請求重定向到同一 服務器或其他Web服務器
  • ,如果我們不關心造成額外的往返到服務器上 每個請求

  • 如果我們不需要保留Query String和Form Variables 原始請求

  • ,如果我們希望我們的用戶能夠看到他 在他的瀏覽器重定向

  • Response.Redirect的是更加人性化的新的重定向URL,站點訪問者可以 書籤的頁面他們被重定向到。

    Server.Transfer的,應使用:


  • 如果我們想當前頁面請求的另一臺服務器
    例,如果沒有轉移到另一個.aspx頁 同一臺服務器上你的服務器是 www.yahoo.com你不能使用服務器。轉移到移動到 www.microsoft.com
  • 如果我們想保留的服務器資源,避免不必要的 往返於服務器
  • 如果我們想保留查詢字符串和表單變量 - 如果我們不需要以顯示我們重定向請求的真實URL在 用戶Web瀏覽器