2010-11-10 83 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上。

相关问题