1

404 (ルーティング エンジンが一致するサービスを見つけられなかったことを意味します) になる Web API アプリケーションへの要求をログに記録したいと考えています。

それはどのように可能でしょうか?

たとえば、次のマッピングがあるとします。

config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new
                    {
                        id = RouteParameter.Optional
                    }
                );

次に、以下を呼び出すと 404 が返されます。

api_rootNotValid/controllername

そのようなリクエストをキャプチャしてログに記録したいと思います。

DelegatingHandler から継承するクラスを作成しましたが、ルーティング エンジンがサービスの検索に成功した場合にのみ、DelegatingHandler に入ります。

だから私は助けることができる何か他のものがあるべきだと思いますか?

4

1 に答える 1

0

これを行うのは難しいと思います...考慮が必要な情報:

  • ルート マッチングは、WebHost(IIS) や SelfHost とは異なる段階で発生します。参照用のWeb APIスタック ダイアグラム

    • WebHost - メッセージ ハンドラーが実行される前でも発生します。したがって、ルートが一致しない場合、委任ハンドラーは実行されません。
    • SelfHost - メッセージ ハンドラーが実行された後、HttpRoutingDispatcher で発生します。この場合、Delegating ハンドラーが実行され、おそらく応答のステータス コードを確認できますが、次のポイントにより、これでもエラーが発生しやすくなります。
  • 404 応答は、ルートが一致しないか、ルートが一致したが一部のアプリケーション レベル コードが 404 で応答した場合に発生する可能性があります (例: ID 10 の製品が見つからない場合、api/Products/10 は 404 を返すことができます)。したがって、ここでのタスクは、ルート マッチングが 404 またはアプリケーション レベルのコードを生成したかどうかを調べることです。

于 2013-05-21T15:18:08.463 に答える