2010-11-10 81 views
1

我在.NET 4上使用asp.net mvc 2上的請求驗證,並且每當我發佈htmlcode到我的控制器操作。那很好。但我現在看到我的死亡黃色屏幕。 取而代之,我想將用戶重定向到我的自定義錯誤頁面。 什麼我需要在我的web.config改變重定向到潛在危險的請求重定向到錯誤頁面

~/Home/InvalidInput 

例如。

回答

2

您想要將該信息添加到web.config中的customErrors元素。該元素在system.web標記下定義。

<customErrors mode="RemoteOnly" defaultRedirect="/Home/InvalidInput " /> 

此外,您將需要定義一個路由來處理這個重定向,因爲那隻不過是一個URL。只需在您的HomeController中指定一條路線和一個動作,當這條路線被擊中時,它將返回InvalidInput視圖。

+0

是的,那有效。謝謝 – jwdehaan 2010-11-10 13:59:04

0

設置一個自定義的基本控制器,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上。

相關問題