2

我有这个

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 值 (:)

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

4

1 回答 1

2

那是因为您正在IExceptionFilter使用 MVC 注册一个,因此它只会捕获在 MVC 操作中引发的未处理异常(我认为可能还有其他 MVC 过滤器?不要引用我的话)。但是关于潜在危险请求的错误是 ASP.NET 错误,该请求从未到达 MVC,因此从未调用 MVC 错误过滤器。同样,任何 IIS 级别错误也不会由此处理。对于非 MVC 错误,您仍然需要监视Application_OnError事件。或者在 Elmah 等异常处理程序的情况下,让它为您监视事件。

于 2013-04-15T23:36:55.033 回答