【问题标题】:ExceptionFilter asp.net mvc异常过滤器 asp.net mvc
【发布时间】:2016-08-27 09:42:51
【问题描述】:

我将创建自己的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("Не может быть меньше нуля");

【问题讨论】:

  • 尝试在控制器而不是方法上添加[IndexException]
  • if (!exceptionContext.ExceptionHandled && exceptionContext.Exception is IndexOutOfRangeException) -> 您从操作中抛出的异常不是 IndexOutOfRange 类型,因此不会进入 if 条件
  • 请查看我的回答

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    如果IndexOutOfRangeException 被捕获,您的异常过滤器只会重定向到ExceptionFound.html。在您提供的示例中,您将抛出一个通用的Exception

    要么更改您的过滤器以捕获所有类型的异常,要么更改此行:

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

    到这里:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-24
      • 2010-09-27
      • 1970-01-01
      相关资源
      最近更新 更多