我在.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