有潜在危险的请求重定向到错误页面

时间:2010-11-10 13:22:38

标签: asp.net-mvc

我在.NET 4上的asp.net mvc 2上使用请求验证,每当我将htmlcode发布到我的控制器操作时。那很好。 但我现在看到了我死亡的黄色屏幕。 而不是我想要将用户重定向到我的自定义错误页面。 我需要在web.config中更改以重定向到

 ~/Home/InvalidInput 

例如。

2 个答案:

答案 0 :(得分:2)

您希望将该信息添加到web.config中的customErrors元素。此元素在system.web标记下定义。

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

此外,您需要定义一个路由来处理此重定向,因为它只不过是一个URL。只需在HomeController中指定一个路由和一个动作,当该路径被命中时,它将返回InvalidInput视图。

答案 1 :(得分: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上。