C# MVC HttpRequestValidationException异常
我正在编写一个MVC 5 internet应用程序,对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;
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可以通过异常筛选器处理它,并且它发生在到达操作之前。您建议我如何修改代码以使其正常工作?