MVC GlobalFilters没有解雇

时间:2013-04-15 23:16:35

标签: asp.net-mvc asp.net-mvc-4

我有这个

public class ExceptionFilter : IExceptionFilter
{
    public void OnException(ExceptionContext context)
    {
        Exception exception = context.Exception;
        if (!(exception is HttpException))
        {
           Trace.TraceError("ExceptionFilter: " + ExceptionUtilities.GetFullExceptionMessage(exception));
           Trace.Flush();
        }
    }
}

,这在global.asax

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    filters.Add(new Filters.ExceptionFilter());
    filters.Add(new HandleErrorAttribute());
}

但是当我通过创建像这样的危险请求触发错误时

  

example.com/dsfgds:dfgd

我得到一个例外:

  

从中检测到潜在危险的Request.Path值   客户(:)

并且过滤器不会触发,内部的断点也不会被击中。

1 个答案:

答案 0 :(得分:2)

那是因为你正在使用MVC注册IExceptionFilter,因此它只会捕获在MVC Action中引发的未处理的异常(我想也许是其他的MVC过滤器?不要引用我的话)。但是有关潜在危险请求的错误是ASP.NET错误,请求从未进入MVC,因此MVC错误过滤器永远不会被调用。同样,任何IIS级错误也不会由此处理。对于非MVC错误,您仍需要监视Application_OnError事件。或者对于像Elmah这样的异常处理程序,让它为您监视事件。