C# MVC HttpRequestValidationException异常

C# MVC HttpRequestValidationException异常,c#,filter,exception-handling,asp.net-mvc-5,onexception,C#,Filter,Exception Handling,Asp.net Mvc 5,Onexception,我正在编写一个MVC 5 internet应用程序,对HttpRequestValidationException异常有疑问 我以前在控制器中的代码如下: protected override void OnException(ExceptionContext filterContext) { // Make use of the exception later this.Session["ErrorException"] = filterContext.Exception;

我正在编写一个MVC 5 internet应用程序,对
HttpRequestValidationException
异常有疑问

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

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);

}
如果发生异常,则错误控制器中的索引视图将显示此错误。 我现在编写了以下全局过滤器:

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;                    
    }
}
上述过滤器的工作原理与前面的
OnException
功能相同,只是现在,如果出现
HttpRequestValidationException
异常,则会显示默认堆栈跟踪页面,而不是错误控制器视图


是否可以在异常过滤器中显示
HttpRequestValidationException
异常的自定义错误视图?

类似的内容适合我

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<int>(val)
                    };

                    filterContext.ExceptionHandled = true;
                }
            }
        }
公共类CustomExceptionAttribute:FilterAttribute,IEExceptionFilter
{
公共无效OneException(例外上下文筛选器上下文)
{
如果(!filterContext.ExceptionHandled)
{
int val=(int)(((异常)filterContext.Exception).ActualValue);
filterContext.Result=新的ViewResult
{
ViewName=“CustomError”,
ViewData=新的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<IDictionary>(val)
                };

                filterContext.ExceptionHandled = true;
            }
        }
    }
公共类HttpRequestValidationExceptionAttribute:FilterAttribute,IEExceptionFilter { 公共无效OneException(例外上下文筛选器上下文) { 如果(!filterContext.ExceptionHandled&&filterContext.Exception为HttpRequestValidationException) { IDictionary val=filterContext.Exception.Data; filterContext.Result=新的ViewResult { ViewName=“RangeError”, ViewData=新的ViewDataDictionary(val) }; filterContext.ExceptionHandled=true; } } }
在此处检查该问题是否使用了应用程序错误函数,而不是ExceptionFilter…我不确定它是如何抛出的,但.net framework可以通过异常筛选器处理它,并且它发生在到达操作之前。您建议我如何修改代码以使其正常工作?