2008-12-03 48 views
13

Tôi hiểu rằng cả hai đều không thay đổi URL mà khách hàng nhìn thấy. Có điều gì trong họ khiến một người trong số họ thích hợp hơn người kia không?
Tôi dự định sử dụng nó trong Application_BeginRequest trong Global.asax, nhưng cũng trong trang aspx thông thường.Server.Transfer vs. Context.RewritePath

Trả lời

9

Tôi nghĩ rằng Context.RewritePath() là tùy chọn tốt hơn. Lý do:

Server.Transfer() ném mỗi lần ThreadAbortException. Kết quả của việc gọi Response.End().

Để biết thêm thông tin chi tiết đọc các bài viết MS sau:

biết thêm thông tin:
Server.Transfer() không gửi một lệnh HTTP 302 chuyển hướng như Response.Redirect() sẽ làm gì .

Theo HttpContext.RewritePath on MSDN, RewritePath() được sử dụng trong trạng thái phiên không nấu.

Ngoài ra, trên một chủ đề khác nhau, Server.Transfer()Server.Execute() rất khác nhau:

Server.Execute() lợi nhuận kiểm soát để trang ban đầu ngay sau khi nơi nó được gọi.

Ví dụ:

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

Would đầu ra:

kiểm tra 1
nội dung của include.aspx hello = ok
thử nghiệm 2

1

Context. RewritePath Gán một đường dẫn viết lại nội bộ và cho phép URL được yêu cầu khác với đường dẫn nội bộ đến tài nguyên. RewritePath được sử dụng trong trạng thái phiên cookieless.

Trong khi Server.transfer chuyển nội dung được thu thập để xử lý một trang sang một trang khác.

1

Để tránh ngoại lệ được ném bởi Server.Transfer, bạn có thể sử dụng Server.Execute. Cả hai Server.Transfer và Server.Execute KHÔNG phát hành một thông báo HTTP 302. Chỉ Response.Redirect phát hành tiêu đề này và yêu cầu trình duyệt đi đến đích mới, tuyên bố rằng nó đã được tạm thời di chuyển. Cả hai Server.Transfer và Server.Execute cho phép bạn thực hiện một trang khác nhau để phục vụ yêu cầu hiện tại.

Các vấn đề liên quan