gpt4 book ai didi

c# - 什么时候执行 MVC ExceptionFilter 与应用程序级错误处理程序?

转载 作者:太空狗 更新时间:2023-10-29 19:46:27 26 4
gpt4 key购买 nike

我有一个自定义异常 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)
}
  1. 什么时候会命中异常过滤器代码,什么时候会直接进入 Application_Error 方法中的全局错误处理程序? (我了解 ExceptionHandled 概念并意识到通过将其标记为已在我的过滤器中处理,它不会级联到全局错误处理程序)。

我认为会命中过滤器的异常 - 404 的 HttpException,没有命中过滤器但确实被应用程序错误处理程序捕获。

  1. 我看过一些代码示例,其中人们使用 global.asax.cs 中的 HttpContext.Current 对特定错误 View 执行 Server.TransferRequest。这是最佳做法吗?使用 web.config 的 system.web 部分中的 CustomErrors 部分会更好吗?

最佳答案

只有在 ASP.NET MVC 管道执行期间发生的错误才会命中异常过滤器,例如在执行 Action 方法期间:

Exception filters. These implement IExceptionFilter and execute if there is an unhandled exception thrown during the execution of the ASP.NET MVC pipeline. Exception filters can be used for tasks such as logging or displaying an error page. The HandleErrorAttribute class is one example of an exception filter.

(来自:https://msdn.microsoft.com/en-us/library/gg416513(VS.98).aspx)

在出现 404 错误的情况下,无法确定 Action 方法,因此不会在过滤器中处理错误。

所有其他错误将在 Application_Error 方法中处理。

关于您问题的第二部分,我推荐以下博客文章,其中包含关于如何以可靠方式设置自定义错误页面的良好概述: http://benfoster.io/blog/aspnet-mvc-custom-error-pages

关于c# - 什么时候执行 MVC ExceptionFilter 与应用程序级错误处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44113894/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com