歡迎光臨 pure C# 技術社群. 登入註冊

pure C# 技術社群

- Microsoft .NET Framework 相關技術非官方討論社群 -

新手問題-Response.Redirect跟Server.Transfer的差別

  • 1
  • [第1/1頁 共4項]
#1

新手問題-Response.Redirect跟Server.Transfer的差別

  • a
 0.0 (0 人評價)
原本我在a.aspx的Page_Load中寫 Response.Redirect("b.aspx");
這樣只要有人連到a.aspx就會自動轉到b.aspx
但是我把Page_Load的程式改成 Server.Transfer("b.aspx");
也是有一樣的效果
到底自動轉換網頁應用Response.Redirect還是要用Server.Transfer
這兩個方法對系統而言有什麼差別

  • 回覆
  • |
  • 引用
  • |
  • 編輯
  • |
  • 私人訊息


贊助商連結

#2

Re: 新手問題-Response.Redirect跟Server.Transfer的差別

  • a
 0.0 (0 人評價)
Response.Redirect

Response.Redirect方法導致瀏覽器鏈接到一個指定的URL。當Response.Redirect()方法被調用時,它會創建一個應答,應答頭中指出了狀態代碼302(表示目標已經改變)以及新的目標URL。瀏覽器從服務器收到該應答,利用應答頭中的信息發出一個對新URL的請求。 這就是說,使用Response.Redirect方法時重定向操作發生在客戶端,總共涉及到兩次與服務器的通信(兩個來回):第一次是對原始頁面的請求,得到一個302應答,第二次是請求302應答中聲明的新頁面,得到重定向之後的頁面。


Server.Transfer

Server.Transfer方法把執行流程從當前的ASPX文件轉到同一服務器上的另一個ASPX頁面。調用 Server.Transfer時,當前的ASPX頁面終止執行,執行流程轉入另一個ASPX頁面,但新的ASPX頁面仍使用前一ASPX頁面創建的應答流。 如果用Server.Transfer方法實現頁面之間的導航,瀏覽器中的URL不會改變,因為重定向完全在服務器端進行,瀏覽器根本不知道服務器已經執行了一次頁面變換。默認情況下,Server.Transfer方法不會把表單數據或查詢字符串從一個頁面傳遞到另一個頁面,但只要把該方法的第二個參數設置成True,就可以保留第一個頁面的表單數據和查詢字符串。 同時,使用Server.Transfer時應注意一點:目標頁面將使用原始頁面創建的應答流,這導致 ASP.NET的機器驗證檢查(Machine Authentication Check,MAC)認為新頁面的ViewState已被篡改。因此,如果要保留原始頁面的表單數據和查詢字符串集合,必須把目標頁面Page指令的 EnableViewStateMac屬性設置成False。

資料來源

  • 回覆
  • |
  • 引用
  • |
  • 編輯
  • |
  • 私人訊息

#3

Re: 新手問題-Response.Redirect跟Server.Transfer的差別

  • a
 0.0 (0 人評價)
謝謝我大概了解了
但是一般情況用Redirect比較好還是Transfer比較好

  • 回覆
  • |
  • 引用
  • |
  • 編輯
  • |
  • 私人訊息

#4

Re: 新手問題-Response.Redirect跟Server.Transfer的差別

  • a
 0.0 (0 人評價)
Redirect明確指明網頁轉向,會造成兩次的request
所以在第二次的request瀏覽器上的網址會是正確的網址

Transfer等於是server端偷換網頁,瀏覽器並不知道網頁已經被轉到別的頁面
這時瀏覽器上的網址會是原來的網址

一般的情況還是Redirect的方式比較多,除非你有意隱藏轉向後的真實網址才用Transfer


  • 回覆
  • |
  • 引用
  • |
  • 編輯
  • |
  • 私人訊息
  • 1
  • [第1/1頁 共4項]