Asp.net web api Web Api REST服务异常处理问题

Asp.net web api Web Api REST服务异常处理问题,asp.net-web-api,actionfilterattribute,onexception,Asp.net Web Api,Actionfilterattribute,Onexception,我使用ASP.NETWebAPI构建了一个简单的REST服务。 我已经将控制器的一个方法与自定义ActionFilterAttribute相关联,覆盖了它的OnActionExecuted。在操作筛选器上,我使用将要发送的响应actionExecutedContext.response。 整个应用程序与一个自定义ExceptionFilterAttribute关联,该属性覆盖用于记录错误的OneException 现在来看问题——当从控制器的方法引发异常时,我预计会出现以下两种情况之一: 1.将

我使用ASP.NETWebAPI构建了一个简单的REST服务。 我已经将控制器的一个方法与自定义ActionFilterAttribute相关联,覆盖了它的OnActionExecuted。在操作筛选器上,我使用将要发送的响应actionExecutedContext.response。 整个应用程序与一个自定义ExceptionFilterAttribute关联,该属性覆盖用于记录错误的OneException

现在来看问题——当从控制器的方法引发异常时,我预计会出现以下两种情况之一: 1.将首先激发OneException,然后使用适当的响应执行OnAction。 2.只调用OnexPetion,因为操作并没有真正完成执行

实际发生的情况是,调用了OnActionExecuted,响应为null,因此这次引发了另一个异常null引用,捕捉到了OneException并记录了错误的异常

我的问题是: 1.如果引发异常,为什么会调用OnActionExecuted?不应该先调用OneException吗?请解释一下。 2.我知道OnActionExecuted应该更改,正确的方法是什么?通常,在执行任何操作之前,我是否需要检查actionExecutedContext.Response或actionExecutedContext.Exception是否不为空,除了OneException方法中的明显检查之外?我的代码基于属性的操作,总是有响应,但显然没有


任何帮助都将不胜感激,提前感谢:

OneException处理程序是响应处理管道的一部分。因此,它们确实在OnActionExecuting和OnActionExecuted处理程序之后被调用。您可以将OnAction*对视为围绕控制器的动作方法,就像try finally块一样。这张海报很好地描绘了什么东西在何时何地运行。这张海报真的有助于我把事情弄清楚!但即使从海报上我也看到,当调用操作后出现异常时,它应该跳过OnActionExecuted和结果转换,直接转到ExceptionFilter。我知道你是对的,因为它实际上是在OneException之前执行OnAction的,但即使是海报也没有以最好的方式解释它:所以非常感谢!我想我的第一个问题得到了答案。第二条有什么帮助吗?再看一遍,是的,我也会这样读。可能仍取决于异常的类型。如果它是一个HttpResponseException,它将被视为一个正常响应,不被视为未处理的异常。但是不应该触发OneException。。。我认为在OnActionExecuted中,我将检查异常而不是响应。在发送有效结果时,如果没有响应正文204 No content Response,则可以取消分配响应。我非常确定该异常不是HttpResponseException,因为我99.99%确定该异常是从DB引发的,因为它是我在调用操作时唯一做的事情。我宁愿也检查一下例外情况,所以我会接受你的建议。THX!: