2012-04-08 44 views
12

Tôi có những điều sau đây trong Global.aspx của tôi đó là có nghĩa để xử lý lỗi:lỗi bắt trong Global.asax

void Application_Error(object sender, EventArgs e) 
{ 
    Exception exception = Server.GetLastError(); 
    if (exception != null) 
    { 
     //Log 
     if (HttpContext.Current.Server != null) 
     { 
      HttpContext.Current.Server.Transfer("/siteerror.aspx"); 
     } 
    } 
} 

này làm việc cho hầu hết các phần, nhưng đôi khi không nhận được vào Server.Transfer. Đối với một số lý do HttpContext.Current.Server là null. Tôi đã tìm ra nơi điều này xảy ra: khi các lỗi xảy ra trong điều khiển người dùng và trong các lớp logic nghiệp vụ của tôi. Am i thiếu cái gì ở đây?

Cảm ơn

+2

Bất kỳ lý do không sử dụng 'Response.Redirect' chứ? – leppie

+1

Trong global.asax ở đâu? –

+0

@leppie Tôi không thêm điều này vì vậy không hoàn toàn chắc chắn lý do tại sao người trước đó đã chọn Server.Transfer, nó không nên tạo sự khác biệt mặc dù phải không? – Peuge

Trả lời

1

Lỗi ứng dụng có thể xảy ra bất kỳ lúc nào - kể cả khi không có kết nối.

Ví dụ: nếu chuỗi nền đang xử lý và gây ra ngoại lệ.

2

Application_Error block có thể bắt ngoại lệ bất cứ lúc nào giữa vòng đời ứng dụng.

vòng đời ứng dụng là mẹ của phiên chu kỳ cuộc sống như bạn có thể hiểu có thể có nhiều phiên trong một ứng dụng duy nhất.

Vì vậy bạn có thể có HttpContext.Current null ở lỗi nào đó xảy ra trước khi tạo phiên làm việc hoặc sau khi hết hạn của phiên.

Nếu bạn muốn viết phiên lỗi cụ thể chuyển hướng bạn nên kiểm tra cho Null của HttpContext hiện luôn.

Bạn cũng có thể sử dụng Server.GetLastError để biết chi tiết lỗi xảy ra và viết trang lỗi của bạn chuyển hướng qua thẻ CustomError trong web.config

Xem đường dẫn sau

http://weblogs.asp.net/scottgu/archive/2006/08/12/Tip_2F00_Trick_3A00_-Show-Detailed-Error-Messages-to-Developers.aspx

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