2008-12-03 58 views
13

我知道他們都不會更改客戶端看到的URL。他們中有沒有什麼能讓他們中的一個比另一個更受歡迎?
我打算在Global.asax中的Application_BeginRequest中使用它,但也在常規的aspx頁面中使用它。Server.Transfer與Context.RewritePath

回答

9

我認爲Context.RewritePath()是更好的選擇。 原因:

Server.Transfer()每次都會拋出一個ThreadAbortException。致電Response.End()的結果。

欲瞭解更多詳細信息,請閱讀以下MS文章:

更多信息:
Server.Transfer()不發送HTTP 302重定向命令Response.Redirect()會做。

根據HttpContext.RewritePath on MSDN,RewritePath()用於無Cookie會話狀態。

此外,在一個不同的主題,Server.Transfer()Server.Execute()有很大的不同:

Server.Execute()控制返回到初始頁面,它被稱爲後。

例如:

<div> 
    test 1 <br/> 
    <% Server.Execute("include.aspx?hello=ok"); %> 
    test 2 <br/> 
</div> 

將輸出:

試驗1項
內容include.aspx的你好= OK
試驗2

1

語境。 RewritePath分配一個內部重寫路徑和允許請求的URL與資源的內部路徑不同。 RewritePath用於無Cookie會話狀態。

Server.transfer將彙編用於處理一個頁面的內容傳輸到另一個頁面。

1

爲了避免Server.Transfer引發的異常,可以使用Server.Execute。 Server.Transfer和Server.Execute都不發出302 HTTP消息。只有Response.Redirect發出這個頭文件並要求瀏覽器去新的目的地,聲稱它是暫時移動的。 Server.Transfer和Server.Execute都允許您執行不同的頁面來處理當前的請求。