Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Web API 2中的ExceptionFilter vs ExceptionLogger vs ExceptionHandler_C#_Asp.net_Exception_Asp.net Web Api_Exception Handling - Fatal编程技术网

C# Web API 2中的ExceptionFilter vs ExceptionLogger vs ExceptionHandler

C# Web API 2中的ExceptionFilter vs ExceptionLogger vs ExceptionHandler,c#,asp.net,exception,asp.net-web-api,exception-handling,C#,Asp.net,Exception,Asp.net Web Api,Exception Handling,我正在读这篇文章,似乎有三个不同的异常事件 我想使用Serilog这样的日志框架来捕获异常 我应该将日志代码放入ExceptionFilter,然后放入ExceptionLogger,然后放入ExceptionHandler?我假设它们都可以访问完整的异常堆栈 此外,我是否也应该将记录代码放入全局.asax中的应用程序\u Error?如果您想记录异常,则必须将代码放入异常处理程序或应用程序\u Error(相同)例外过滤器对错误进行分类应用程序错误在应用程序引发异常时处理错误 Exceptio

我正在读这篇文章,似乎有三个不同的异常事件

我想使用Serilog这样的日志框架来捕获异常

我应该将日志代码放入
ExceptionFilter
,然后放入
ExceptionLogger
,然后放入
ExceptionHandler
?我假设它们都可以访问完整的异常堆栈


此外,我是否也应该将记录代码放入
全局.asax中的
应用程序\u Error

如果您想记录异常,则必须将代码放入
异常处理程序或
应用程序\u Error
(相同)<代码>例外过滤器
对错误进行分类<代码>应用程序错误
在应用程序引发异常时处理错误

ExceptionFilter
通过错误逻辑对错误进行分离和分类,
ExceptionLogger
通过错误日志逻辑记录错误发生时的情况


简而言之,您可以将代码放入
Application\u Error
global.asax

显然,您需要记录所有未经处理的异常,以监控应用程序的整体运行状况。为此,使用ExceptionHandler将是您的最佳选择

如果引发了未经处理的异常,则以下用户将按相同顺序接收该异常:

  • 例外记录者
  • 例外过滤器
  • 异常处理程序(如果未处理)
  • 为了更好地理解它们之间的区别,我将解释每种方法的目的


    例外记录者 查看Web API捕获的所有未经处理的异常的解决方案。在您甚至点击控制器的操作之前或控制器已经返回操作结果响应之后(请记住,操作的返回值不会直接进入浏览器,而是由请求/响应管道进一步处理),可能会引发异常

    例如,在路由、响应序列化等过程中,控制器的构造函数中可能会发生异常

    可以注册多个异常记录器,并且在发生异常时将调用所有异常记录器

    请注意,异常记录器是在异常筛选器之前调用的,在异常筛选器中将对其进行处理,因此,如果记录这些异常记录器,您可能会得到许多不相关的信息

    • 目的:查看所有未处理的异常(甚至在它们到达异常过滤器之前)

    • 范围:全球


    例外过滤器 使用此选项处理预期的异常(例如,业务逻辑引发的UnauthorizedException),并根据异常类型自定义响应。换句话说,使用它处理异常(例如,如果异常是UnathorizedException,则将用户重定向到登录页面)

    处理异常“wins”的第一个筛选器,这样即使已处理异常,也不会调用其他异常处理程序(已设置响应对象)

    • 目的:处理(非日志)异常
    • 范围:每个操作、每个控制器、全局

    例外处理程序 这一个可以而且应该用于记录未受影响的异常。每个应用程序只能注册一个。它还可用于向用户显示一般错误页面-“发生未知错误”

    • 目的:记录和处理不可预测/意外的异常
    • 范围:全球


    我建议您看看这个

    它取决于您要记录的内容。您可以将它们放入所有处理程序中,也可以不放入任何处理程序中。我认为我们应该在异常记录器中使用日志框架,因为从文档中可以看出,异常记录器是查看Web API捕获的所有未经处理的异常的解决方案。-异常处理程序是一种解决方案,用于定制对Web API捕获的未处理异常的所有可能响应。-异常筛选器是处理与特定操作或控制器相关的未处理异常子集的最简单解决方案。仅供参考,当连接即将中止且无法发送新的响应消息时,将调用记录器,但不会调用处理程序