我有这个
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
我遇到异常:
A potentially dangerous Request.Path value was detected from the client (:)
过滤器不会触发,内部断点也不会被命中。
最佳答案
那是因为您正在使用 MVC 注册一个 IExceptionFilter
,因此它只会捕获 MVC Action 中引发的未处理的异常(我认为可能是其他 MVC 过滤器?不要引用我对此)。但有关潜在危险请求的错误是 ASP.NET 错误,该请求从未发送到 MVC,因此永远不会调用 MVC 错误过滤器。同样,任何 IIS 级别的错误也不会由此处理。对于非 MVC 错误,您仍然需要监视 Application_OnError
事件。或者对于像 Elmah 这样的异常处理程序,让它为您监视事件。
关于asp.net-mvc - MVC GlobalFilters 未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16026203/