1

我使用 ASP.NET web api 构建了一个简单的 REST 服务。
我已将我的控制器方法之一与自定义 ActionFilterAttribute 相关联,覆盖它的 OnActionExecuted。在操作过滤器上,我使用即将发送的响应(actionExecutedContext.Response)。
整个应用程序与用于记录错误的自定义 ExceptionFilterAttribute 覆盖 OnException 相关联。

现在解决问题 - 当从控制器的方法引发异常时,我预计会出现以下两种情况之一:
1. OnException 将首先被触发,然后是 OnActionExcuted 并带有适当的响应。
2. 只有 OnExcpetion 被调用,因为动作并没有真正完成执行。

实际发生的是 OnActionExecuted 被调用,响应为空,因此引发了另一个异常(这次是空引用),在 OnException 中捕获并记录错误的异常。

我的问题是:
1. 如果引发异常,为什么会调用 OnActionExecuted?不应该先调用 OnException 吗?将提供解释。
2.我知道OnActionExecuted应该改变,正确的做法是什么?一般来说,在做任何事情之前,我是否需要检查 actionExecutedContext.Response 或 actionExecutedContext.Exception 不为空(除了 OnException 方法中的明显检查)?我的代码基于属性的操作,总是有响应,但显然没有。

任何帮助都会得到帮助,在此先感谢:)!

4

0 回答 0