2012-05-11 6 views
5

Tôi đã bật lỗi tùy chỉnh trong webconfig và chuyển hướng đến "/ Lỗi/sự cố". Điều này đang hoạt động như được thiết kế. Elmah đang đăng nhập lỗi. Chế độ xem lỗi cũng đang được hiển thị.asp.net mvc 3 nhận ngoại lệ được ném

Vấn đề là tôi muốn kiểm tra lỗi được ném trong hành động Trouble của bộ điều khiển Lỗi của tôi. Khi một lỗi được ném, làm thế nào để bạn có quyền truy cập vào nó sau khi MVC đã chuyển hướng bạn đến trình xử lý lỗi tùy chỉnh?

Tôi ném một ngoại lệ nếu CurrentUser là null:

 if (CurrentUser == null) 
     { 
      var message = String.Format("{0} is not known. Please contact your administrator.", context.HttpContext.User.Identity.Name); 
      throw new Exception(message, new Exception("Inner Exception")); 
     } 

Tôi muốn để có thể truy cập này trong xử lý lỗi tùy chỉnh của tôi ("Lỗi/Rắc rối"). Làm cách nào để bạn truy cập ngoại lệ?

Dưới đây là hành động rắc rối của tôi:

public ActionResult Trouble() 
    { 
     return View("Error"); 
    } 

Dưới đây là quan điểm của tôi:

@model System.Web.Mvc.HandleErrorInfo 

<h2> 
    Sorry, an error occurred while processing your request. 
</h2> 
@if (Model != null) 
{ 
    <p>@Model.Exception.Message</p> 
    <p>@Model.Exception.GetType().Name<br /> 
    thrown in @Model.ControllerName @Model.ActionName</p> 
    <p>Error Details:</p> 
    <p>@Model.Exception.Message</p> 
} 

System.Web.Mvc.HandleErrorInfo là mô hình để xem Rắc rối của tôi và nó là trống rỗng. Cảm ơn bạn đã giúp đỡ.

+0

Bạn muốn xem nó trong khi bạn đang gỡ lỗi? – mattytommo

+0

không phải trong khi gỡ lỗi. Tôi muốn các hành động rắc rối để kiểm tra lỗi ném và lấy thông báo lỗi để hiển thị cho người dùng cuối –

Trả lời

2

Tôi tìm thấy một workaround:

trong Global.asax Tôi làm điều này:

 protected void Application_Error() 
    { 
     var exception = Server.GetLastError(); 

     HttpContext.Current.Application.Lock(); 
     HttpContext.Current.Application["TheException"] = exception; 
     HttpContext.Current.Application.UnLock(); 
    } 

Trong Lỗi/Rắc rối tôi làm điều này:

 var caughtException = (Exception)HttpContext.Application["TheException"]; 
     var message = (caughtException!= null) ? caughtException.Message : "Ooops, something unexpected happened. Please contact your system administrator"; 
     var ex = new Exception(message); 
     var errorInfo = new HandleErrorInfo(ex, "Application", "Trouble"); 
     return View("Error", errorInfo); 

này đang làm việc. Nhưng nó có vẻ như một cách kỳ lạ để đi về nó. Có ai có một giải pháp tốt hơn? Cảm ơn bạn đã giúp đỡ.

+0

Đó có lẽ không phải là xấu như bạn nghĩ, nhìn vào câu hỏi trước đó có vẻ như một cách để đi :) – mattytommo