2011-01-13 50 views
7

Có cần phải gọi Response.End() sau khi Response.Redirect (url)gọi Response.End() sau khi Response.Redirect()

Cập nhật

Cảm ơn tất cả các câu trả lời. Bởi vì một số câu trả lời nói rằng đó là cần thiết và những người khác nói không, tôi đã tìm kiếm và đã tìm thấy trong msdn dưới nhận xét như sau:

Redirect gọi End mà đặt ra một ngoại lệ ThreadAbortException sau khi hoàn thành.

+0

Tôi có điều này trong bài viết của tôi –

+0

@ m.edmondson: Có và tôi cung cấp cho bạn +1 và chấp nhận :) Tôi chưa thấy câu trả lời của bạn trước khi tôi đã tìm thấy câu trả lời cho bản thân mình trên msdn. Đó là lý do tại sao tôi tìm kiếm mới và viết bản cập nhật của tôi. – HCL

+1

Xem liên quan [phản hồi-kết thúc-coi-có hại] (http://stackoverflow.com/questions/1087777/is-response-end-considered-harmful) –

Trả lời

11

Response.Redirect cuộc gọi Response.End cho bạn

Tôi không đồng ý thực hành tốt - dẫn đến mã gây hiểu nhầm.

MSDN:

Redirect gọi End mà đặt ra một ngoại lệ ThreadAbortException sau khi hoàn thành.

Các định luật HTTP giải thích rằng một khi một phản ứng được gửi máy chủ được thực hiện (không có mã hơn được gọi)

-1

Cần thiết hay không vẫn là cách hay để gọi Response.End() ở cuối phản hồi. Nó chắc chắn sẽ không làm tổn thương gì cả.

+0

Nó sẽ bị tổn thương vì sự lộn xộn mã của nó - không có gì sẽ được gọi sau khi phản hồi .Redirect() tại sao lại có nó ở đó? –

+1

Thực ra nó làm tổn thương mọi thứ. Response.End hoạt động bằng cách ném một ThreadAbortException. Điều này có thể có tất cả các loại tác dụng phụ khó chịu trong ứng dụng của bạn. Một trong đó tôi đã nhấn là một giao dịch TransactionScope đã không được xóa khỏi lưu trữ cục bộ luồng, do đó, thời gian tiếp theo mà thread đã cố gắng sử dụng một TS nó bị đánh bom. Và sẽ tiếp tục ném bom cho đến khi apppool được tái chế. Kết thúc là có cho asp cổ điển để di chuyển asp.net, nhưng nó không phải cái gì bạn nên sử dụng. Không may của nó mà MS đã cho đến khi .Net 4 để thực sự tài liệu này và thêm Response.CompleteRequest. – Andy

+0

Xem: http://msdn.microsoft.com/en-us/library/a8wa7sdt.aspx và http://msdn.microsoft.com/en-us/library/system.web.httpresponse.end.aspx – Andy

4

Response.Redirect cho phép bạn gọi Response.End.

Response.Redirect(url, true); 
2

Nó không cần thiết phải gọi Response.End, trên thực tế nếu bạn nghĩ rằng bạn cần phải kết thúc phản ứng sử dụng sự quá tải của Response.Redirect (url, endResponse)

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