exception-handling - 点网核心 : OnException method in a custom filter is called two times

标签 exception-handling asp.net-core-mvc .net-core

我正在使用 dotnet core 并创建了一个自定义异常过滤器来处理异常。我面临的问题是,如果出现异常,自定义过滤器中的 onException 方法会被调用两次。下面是代码:

   public class CustomExceptionFilter : ExceptionFilterAttribute
     {
            public override void OnException(ExceptionContext context)
                 {
                    // Code 
                    base.OnException(context);
                 }
     }

Controller 代码是:
         [CustomExceptionFilter]   
         public class MyController : Controller
         {
             // Raise an exception in any apis
         }

为什么 onException 被调用两次?

最佳答案

我使用 Visual Studio 创建了一个新的 Asp.Net Core Web 应用程序并使用了标准的 Web 应用程序模板。然后我添加了 CustomExceptionFilter类并添加了 [CustomExceptionFilter]归因于 HomeController并在其中抛出异常 Index方法:

[CustomExceptionFilter]
public class HomeController : Controller
{

    public IActionResult Index()
    {
        throw new Exception("Time to bail!");
        return View();
    }
}

最后,我在 CustomExceptionFilter 中的这一行上设置了一个断点:
 base.OnException(context);

并运行了网站。调试器在 throw 上停止当然,然后它在断点处停止。断点只命中一次。所以我的设置验证了预期的行为。

故障排除
过去,我遇到过类似的情况,应该只调用一次的东西被调用两次,结果几乎总是因为第二个 http 请求进来了,这是我没想到的。所以它实际上每个 http 请求只被调用一次。检查的一种方法是查看方法中的路径和查询,您可以按如下所示进行操作:
 public class CustomExceptionFilter : ExceptionFilterAttribute {
    public override void OnException(ExceptionContext context) {

        //set breakpoing on the following line to see what the requested path and query is
        string pathAndQuery = context.HttpContext.Request.Path + context.HttpContext.Request.QueryString;

        // Code 
        base.OnException(context);
    }
}

关于exception-handling - 点网核心 : OnException method in a custom filter is called two times,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44041150/

相关文章:

docker - 如何通过 dotnet sdk 将 .dcproj 添加到解决方案中

asp.net-mvc - ASP.NET MVC 4 - 异常处理不起作用

c# - 从 FileSystemWatcher 错误中恢复的最佳做法是什么?

rest - 处理REST和浏览器请求异常的最佳实践?

c# - 具有适当缓存和 dbContext 使用的 DI 服务

c# - 关于 .net 核心的 csproj 格式的完整文档在哪里?

c# - Dotnet 核心 3.1 版本的 RelationalMetadataExtensions.Relations()

Ruby - 数组、边界和引发异常

asp.net-mvc - MVC 5 或 MVC 6 适合 MVC 初学者

c# - 在 ASP.NET Core 中使用 MimeMapping