2011-08-29 46 views
6

Tôi đang cố thực hiện chuyển hướng HTTP 302, nhưng nhận ngoại lệ sau trong khi tôi đang chạy trong chế độ gỡ lỗi.Http Chuyển hướng 302

Unable to evaluate expression because the code is optimized or a native frame is on top of the call stack 

var response = HttpContext.Current.Response; 
response.Clear(); 
response.Status = "302 Found"; 
response.AddHeader("Location", "http://google.com"); 
response.End(); 
response.Flush(); 

dài truyện ngắn, cuộc gọi này không được xả nước phản ứng và không chuyển hướng.

Làm cách nào để làm việc này?

+0

Bạn đã biên dịch ứng dụng của mình ở chế độ gỡ lỗi và chạy như vậy hoặc bạn đã biên soạn ứng dụng của mình ở chế độ phát hành và chỉ cần đính kèm trình gỡ rối vào quy trình? – Icarus

+0

Hãy xem tại đây http://automagical.rationalmind.net/2010/03/08/response-redirect-and-302-and-301-status-codes/ –

Trả lời

7

Bạn không nên gọi cả EndFlush theo cách này - cho chuyển hướng với HTTP 302 bạn nên sử dụng HttpContext.Current.Response.Redirect thấy http://msdn.microsoft.com/en-us/library/a8wa7sdt.aspx

+0

là chuyển hướng 302? mà làm việc cho tôi, nhưng im không chắc chắn rằng đó là 302 – DarthVader

+0

CÓ - đó là, xem liên kết đến MSDN trong câu trả lời của tôi ... – Yahia

+0

@ user177883 xin vui lòng không quên upvote/mark như chấp nhận bất kỳ câu trả lời đó là giúp đỡ ... – Yahia

4

Đối tượng HttpResponse có một phương pháp để thực hiện một chuyển hướng 302.

Response.Redirect("page.aspx") 

Mặc dù mã của bạn nên hoạt động tốt như cách thông thường để triển khai 301 redirect.

Lưu ý rằng response.Flush() là dự phòng vì bộ đệm phản hồi được xả cho máy khách và thực thi sẽ kết thúc vào response.End(), do đó, dòng đó sẽ không được thực hiện.

Tìm kiếm trên google cho những người khác có similar problems điểm đến bài viết KB này http://support.microsoft.com/kb/312629/EN-US/ có khả năng là nguyên nhân gây ra sự cố của bạn.

+0

là chuyển hướng 302? mà làm việc cho tôi, nhưng tôi không chắc chắn nếu đó là 302 – DarthVader

+0

Có nó là theo các tài liệu, bạn có thể sử dụng một cái gì đó như firebug hoặc fiddler để kiểm tra. –

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