我在.NET 4上使用asp.net mvc 2上的請求驗證,並且每當我發佈htmlcode到我的控制器操作。那很好。但我現在看到我的死亡黃色屏幕。 取而代之,我想將用戶重定向到我的自定義錯誤頁面。 什麼我需要在我的web.config改變重定向到潛在危險的請求重定向到錯誤頁面
~/Home/InvalidInput
例如。
我在.NET 4上使用asp.net mvc 2上的請求驗證,並且每當我發佈htmlcode到我的控制器操作。那很好。但我現在看到我的死亡黃色屏幕。 取而代之,我想將用戶重定向到我的自定義錯誤頁面。 什麼我需要在我的web.config改變重定向到潛在危險的請求重定向到錯誤頁面
~/Home/InvalidInput
例如。
您想要將該信息添加到web.config中的customErrors元素。該元素在system.web
標記下定義。
<customErrors mode="RemoteOnly" defaultRedirect="/Home/InvalidInput " />
此外,您將需要定義一個路由來處理這個重定向,因爲那隻不過是一個URL。只需在您的HomeController中指定一條路線和一個動作,當這條路線被擊中時,它將返回InvalidInput視圖。
設置一個自定義的基本控制器,HomeController(以及任何其他人)從中繼承。然後,您可以在基本控制器中設置異常處理:
protected override void OnException(ExceptionContext filterContext)
{
if (filterContext.HttpContext.Request.IsAjaxRequest())
{
base.OnException(filterContext);
return;
}
filterContext.ExceptionHandled = true;
if (filterContext.Exception is HttpException)
{
var statusCode = ((HttpException) filterContext.Exception).GetHttpCode();
Response.StatusCode = statusCode;
if (statusCode == (int) HttpStatusCode.NotFound)
{
filterContext.Result = View(ErrorController.Actions.NotFound);
}
else
{
filterContext.Result = View(ErrorController.Actions.InternalServerError);
}
}
else
{
Response.StatusCode = (int) HttpStatusCode.InternalServerError;
filterContext.Result = View(ErrorController.Actions.InternalServerError);
}
base.OnException(filterContext);
}
當然,您還需要您自己的ErrorController和錯誤視圖。
這樣做的好處是:a)您可以更好地控制如何處理異常,b)可以設置適當的HTTP狀態碼,以及c)可以單元測試錯誤處理程序。
customErrors的defaultRedirect屬性可以起到更基本的作用,但是您不能單元測試行爲,並且用戶將暴露於您的錯誤路由而不是停留在當前URI上。
是的,那有效。謝謝 – jwdehaan 2010-11-10 13:59:04