我有这个
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值 客户(:)
并且过滤器不会触发,内部的断点也不会被击中。
答案 0 :(得分:2)
那是因为你正在使用MVC注册IExceptionFilter
,因此它只会捕获在MVC Action中引发的未处理的异常(我想也许是其他的MVC过滤器?不要引用我的话)。但是有关潜在危险请求的错误是ASP.NET错误,请求从未进入MVC,因此MVC错误过滤器永远不会被调用。同样,任何IIS级错误也不会由此处理。对于非MVC错误,您仍需要监视Application_OnError
事件。或者对于像Elmah这样的异常处理程序,让它为您监视事件。