當我的ASP.NET MVC 4應用程序發生錯誤時,我想根據錯誤類型爲用戶定製視圖。例如,未找到頁面或發生了異常(提供了有關該異常的一些用戶友好的詳細信息)。我已經檢查瞭如何在StackOverflow和其他在線資源上執行此操作的其他示例,但沒有任何答案適用於我。ASP.NET MVC 4 - 異常處理不工作
基本的[HandleError]屬性在VS2012中似乎不適用於以.NET 4.5爲目標的MVC 4應用程序。下面是代碼我在我家的控制器:
[HandleError]
public ActionResult Index()
{
Response.TrySkipIisCustomErrors = true; //doesn't work with or without this
throw new NullReferenceException("Uh oh, something broke.");
}
它只是拋出一個異常,並且我希望默認的〜/共享/ Error.cshtml視圖,因爲[的HandleError]屬性的返回,但我得到的只是一個HTTP 500內部服務器錯誤,指示無法顯示該頁面。我檢查了我的web.config,不同的配置似乎表現出奇怪。在節,目前,它包含:
<customErrors mode="On" />
(我嘗試添加的defaultRedirect並用的customErrors模式=「關」以及但是沒有任何效果......無論是共享的錯誤觀點或如果我將customErrors模式更改爲off,那麼我可以看到異常詳細信息,因此我們可以正確地看到異常細節,因此它正確地拋出「呃哦,破壞了某些東西」的異常。
我也試過了向HomeController添加一個OnException處理程序,雖然我可以通過調試並看到OnException事件正在引發,但它沒有任何區別:
protected override void OnException(ExceptionContext filterContext)
{
base.OnException(filterContext);
filterContext.ExceptionHandled = true;
if (filterContext == null)
{
filterContext.Result = View("CustomError");
return;
}
Exception e = filterContext.Exception;
// TODO: Log the exception here
ViewData["Exception"] = e; // pass the exception to the view
filterContext.Result = View("CustomError");
}
我也試圖改變[的HandleError]指定一個觀點,但似乎並不要麼做任何事情:
[HandleError(View="CustomError")]
任何幫助將非常感激。如果您需要更多詳細信息,請告訴我。
即使我沒有在web.config中的任何地方使用'RemoteOnly',我的原始代碼看起來似乎是遠程工作的,只是不在本地!這對我來說非常驚奇。我必須在web.config的部分添加'',以便渲染視圖,但這似乎很正常。這使得本地調試變得更加困難,並且由於沒有使用'mode = RemoteOnly',所以看起來像一個bug。如果有人發現如何在本地工作,請告訴我。 (我可能會特別提出第二個問題。) –