MVC的Htt prequestValidationException例外 [英] MVC HttpRequestValidationException exception

查看:203
本文介绍了MVC的Htt prequestValidationException例外的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我编码一个MVC 5互联网应用,并有关于在的Htt prequestValidationException 异常的问题。

I am coding a MVC 5 internet application and have a question in regards to the HttpRequestValidationException exception.

我的previous在我的控制器code是如下:

My previous code in my controller is as follows:

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

}

如果发生了异常,那么在错误控制器中的索引视图中显示此错误。
现在我已经写了下面的全局过滤器:

If an exception occurred, then the Index view in the Error controller displayed this error. I have now written the following global 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;                    
    }
}

以上过滤器的工作原理相同,previous onException的功能,除了现在,如果一个的Htt prequestValidationException 出现异常,默认的堆栈跟踪页面显示,而不是错误控制器视图。

The above filter works the same as the previous OnException function, except now, if a HttpRequestValidationException exception occurs, the default stack trace page is shown, rather than the Error controller view.

是否有可能显示的Htt prequestValidationException 在异常过滤器异常的自定义错误的看法?

Is it possible to display a custom error view for HttpRequestValidationException exceptions in an exception filter?

推荐答案

这样的事情对我的作品。

Something like this works for me.

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

**编辑***

** EDIT ***

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

这篇关于MVC的Htt prequestValidationException例外的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆