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