ExceptionFilter asp.net mvc

时间:2016-08-27 09:42:51

标签: c# asp.net asp.net-mvc date

我要创建自己的exceptionfilter,它继承自FilterAttributeIExceptionFilter 源代码如下:

public class IndexException : FilterAttribute, IExceptionFilter
{
    public void OnException(ExceptionContext exceptionContext)
    {
        if (!exceptionContext.ExceptionHandled && exceptionContext.Exception is IndexOutOfRangeException)
        {
            exceptionContext.Result = new RedirectResult("/Content/ExceptionFound.html");
            exceptionContext.ExceptionHandled = true;
        }
    }
}

但是当我的代码到达Index方法时,手动生成异常,我的过滤器无法正常工作

[IndexException]
public ActionResult Index()
{
    throw new Exception("Не может быть меньше нуля");

2 个答案:

答案 0 :(得分:0)

您必须通过 IndexException 中的RegisterGlobalFilters在ASP.NET MVC管道中注册过滤器FilterConfig.cs

public class FilterConfig
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorAttribute());
        // add your filter
        filters.Add(new IndexException());
    }
}

答案 1 :(得分:0)

如果发现ExceptionFound.html,您的例外过滤器只会重定向到IndexOutOfRangeException。在您提供的示例中,您将抛出通用Exception

更改过滤器以捕获所有类型的异常或更改此行:

throw new Exception("Не может быть меньше нуля");

对此:

throw new IndexOutOfRangeException("Не может быть меньше нуля");