MVC HttpRequestValidationExceptionexception

我正在编写一个MVC 5互联网应用程序,并对HttpRequestValidationExceptionexception有疑问。

我之前在我的控制器中的代码如下:

 protected override void OnException(ExceptionContext filterContext) { // Make use of the exception later this.Session["ErrorException"] = filterContext.Exception; if (filterContext.Exception is HttpRequestValidationException) { TempData["UITitle"] = "Validation"; TempData["UIHeading"] = customErrorType; TempData["UIMessage"] = filterContext.Exception.Message; TempData["UIException"] = filterContext.Exception; filterContext.ExceptionHandled = true; } else { TempData["UITitle"] = "Error"; TempData["UIHeading"] = customErrorType; TempData["UIMessage"] = filterContext.Exception.Message; TempData["UIException"] = filterContext.Exception; } filterContext.Result = this.RedirectToAction("Index", "Error"); base.OnException(filterContext); } 

如果发生exception,则错误控制器中的“索引”视图显示此错误。 我现在写了以下全局filter:

 public class ExceptionFilterDisplayErrorView : IExceptionFilter { public virtual void OnException(ExceptionContext filterContext) { filterContext.ExceptionHandled = true; RouteValueDictionary routeValueDictionary = new RouteValueDictionary(); routeValueDictionary.Add("controller", "Error"); routeValueDictionary.Add("action", "Index"); filterContext.Controller.TempData.Clear(); filterContext.Controller.TempData.Add("UITitle", "Error"); filterContext.Controller.TempData.Add("UIHeading", "Error"); filterContext.Controller.TempData.Add("UIMessage", filterContext.Exception.Message); filterContext.Controller.TempData.Add("UIException", filterContext.Exception); RedirectToRouteResult redirectToRouteResult = new RedirectToRouteResult(routeValueDictionary); filterContext.Result = redirectToRouteResult; } } 

上面的filter与之前的OnException函数的工作方式相同,但现在除外,如果发生HttpRequestValidationExceptionexception,则会显示默认堆栈跟踪页面,而不是Error控制器视图。

是否可以在exceptionfilter中显示HttpRequestValidationExceptionexception的自定义错误视图?

这样的事对我有用。

 public class CustomExceptionAttribute : FilterAttribute, IExceptionFilter { public void OnException(ExceptionContext filterContext) { if (!filterContext.ExceptionHandled) { int val = (int)(((Exception)filterContext.Exception).ActualValue); filterContext.Result = new ViewResult { ViewName = "CustomError", ViewData = new ViewDataDictionary(val) }; filterContext.ExceptionHandled = true; } } } 

**编辑***

 public class HttpRequestValidationExceptionAttribute : FilterAttribute, IExceptionFilter { public void OnException(ExceptionContext filterContext) { if (!filterContext.ExceptionHandled && filterContext.Exception is HttpRequestValidationException) { IDictionary val = filterContext.Exception.Data; filterContext.Result = new ViewResult { ViewName = "RangeError", ViewData = new ViewDataDictionary(val) }; filterContext.ExceptionHandled = true; } } }