私はハイブリッドMVC/Web APIプロジェクトを持っており、APIレスポンスをラップするための単純なDelegatingHandler実装を追加しました。これはうまくいくが、ハンドラはMVCコントローラへのリクエストに対しても呼び出されている。私の理解では、DelegatingHandlerはAPIルートに対してのみ呼び出されます。MVC要求に対して私のDelegatingHandlerがなぜ起動しますか?
私はOWINといくつかの属性ルートを使用しています。 Startup.csの関連コードは次のとおりです。
var config = new HttpConfiguration();
// ...
var debugging = HttpContext.Current == null || HttpContext.Current.IsDebuggingEnabled;
config.MessageHandlers.Add(new ApiResponseDelegatingHandler(debugging));
これにより、APIとWebリクエストの両方がラップされ、JSONとして送信されます。コメントアウトすると問題は解決されますが、APIリクエストはラップされません。 Webページのエラーメッセージは、
要求URI 'xxx'と一致するHTTPリソースが見つかりませんでした。いいえ このリクエストのルートデータが見つかりました。
Web APIより前にMVCルートが追加されるようにルートを登録するように強制しましたが、それは助けになりませんでした。
私はこれをActionFilterAttributeを使用して正常に実装できますが、エラーは処理されません。 –
MVCでもハンドラを持つことができますが、動作は期待通りです。あなたができることは、特定のリクエストで見つかったルートがAPIコントローラを持つ名前空間にあるかどうかを確認することです。しかし、IMOでは2つのプロジェクトを分割する必要があります。 – Marco
アクションフィルタはエラーを処理しますが、スタック内ではコントローラ自体で発生するエラーを処理します。 – Marco