我有一个自定义异常FilterAttribute,如下所示:
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true)]
public sealed class ExceptionLoggingFilterAttribute : FilterAttribute, IExceptionFilter
{
public void OnException(ExceptionContext filterContext)
{
if (filterContext == null)
{
throw new ArgumentNullException(nameof(filterContext));
}
if (filterContext.ExceptionHandled)
{
return;
}
// some exception logging code (not shown)
filterContext.ExceptionHandled = true;
}
我在FilterConfig.cs
中全局注册了这个public static class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters?.Add(new ExceptionLoggingFilterAttribute());
}
}
我还在我的global.asax.cs
中声明了一个Application_Error方法protected void Application_Error(object sender, EventArgs e)
{
var exception = Server.GetLastError();
// some exception logging code (not shown)
}
我认为会遇到过滤器的异常 - 404的HttpException,不会触及过滤器但会被应用程序错误处理程序捕获。
答案 0 :(得分:1)
只会针对在执行ASP.NET MVC管道期间发生的错误命中异常过滤器,例如:在执行Action方法期间:
异常过滤器。这些实现IExceptionFilter并执行if 在执行期间抛出了未处理的异常 ASP.NET MVC管道。异常过滤器可用于诸如此类的任务 记录或显示错误页面。 HandleErrorAttribute类是 一个例外过滤器的例子。
(来自:https://msdn.microsoft.com/en-us/library/gg416513(VS.98).aspx)
如果出现404错误,则无法确定Action方法,因此不会在过滤器中处理错误。
所有其他错误将在Application_Error
方法中处理。
关于问题的第二部分,我建议使用以下博客文章,其中包含有关如何以可靠方式设置自定义错误页面的良好概述: http://benfoster.io/blog/aspnet-mvc-custom-error-pages