MVC HttpRequestValidationExceptionexception
我正在编写一个MVC 5互联网应用程序,并对HttpRequestValidationException
exception有疑问。
我之前在我的控制器中的代码如下:
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
函数的工作方式相同,但现在除外,如果发生HttpRequestValidationException
exception,则会显示默认堆栈跟踪页面,而不是Error控制器视图。
是否可以在exceptionfilter中显示HttpRequestValidationException
exception的自定义错误视图?
这样的事对我有用。
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; } } }
- 你能扩展HttpContext.Current.User.Identity属性吗?
- 路径控制器…未找到或未实现IController
- validation失败时如何检查EntityValidationErrors?
- 如何在代码第一个ASP.NET MVC 5应用程序中正确设置一对多关系中的外键约束
- ASP MVC 5中的角色管理(Microsoft.AspNet.Identity)
- ASP.NET身份确认电子邮件是纯文本而不是HTML
- User.Identity.GetUserId是否已缓存或每次从数据库中获取?
- MVC5的嵌套布局
- Enum RadioButtonFor Editor Template设置值