ASP.NET Web API を使用して単純な REST サービスを構築しました。
コントローラーのメソッドの 1 つをカスタム ActionFilterAttribute に関連付け、OnActionExecuted をオーバーライドしました。アクション フィルターでは、送信しようとしている応答 (actionExecutedContext.Response) を使用します。
アプリケーション全体は、エラーのログ記録に使用される OnException をオーバーライドするカスタム ExceptionFilterAttribute に関連付けられています。
ここで問題があります - コントローラーのメソッドから例外が発生した場合、次の 2 つのうちのいずれかが予想され
ます。
2. アクションの実行が実際には終了していないため、OnExpetion のみが呼び出されます。
実際に何が起こるかというと、OnActionExecuted が呼び出され、応答が null になり、その結果、別の例外 (今回は null 参照) が発生し、OnException でキャッチされ、間違った例外がログに記録されます。
私の質問は次のとおり
です。 1. 例外が発生した場合に OnActionExecuted が呼び出されるのはなぜですか? 最初に OnException を呼び出すべきではありませんか? 説明があります。
2. OnActionExecuted を変更する必要があることは理解していますが、正しい方法は何ですか? 一般に、何かを実行する前に、actionExecutedContext.Response または actionExecutedContext.Exception が null でないことを確認する必要がありますか (OnException メソッドでの明らかなチェック以外に)? 私はコードを属性のアクションに基づいており、常に応答がありますが、明らかにそうではありません。
事前に感謝します:)!