9

ASP.NET Web API に対して行われたすべての HTTP 要求をログに記録することは可能ですか? 要求の形式が正しくない場合や、その他の理由でいずれかのコントローラーへのルーティングに失敗した場合でも可能ですか?

たとえば、POST メソッドのパラメータとして Order モデルがある場合、リクエストが正しくないと、コントローラの POST メソッドに到達できなくなります。将来の障害を防ぐためのアクションを実行できるように、誰かに警告したいと思います。

これらのリクエストをコントローラーからさらに上流にキャプチャする方法はありますか?

4

2 に答える 2

3

トレースを使用するか、以下に示すように ITraceWriter を実装する必要があります

http://www.asp.net/web-api/overview/testing-and-debugging/tracing-in-aspnet-web-api

またはメッセージハンドラーを実装する

http://www.strathweb.com/2012/05/implementing-message-handlers-to-track-your-asp-net-web-api-usage/

http://www.asp.net/web-api/overview/working-with-http/http-message-handlers

メッセージ ハンドラーを使用すると、HttpControllerDispatcher に到達する前にメッセージを変更できるため、ルーティングとアクション メソッドの選択に関する一般的な問題を処理できます。

しかし最後に、IIS でホストしている場合は、AppFabric ログを使用することを躊躇しないでください。要求が Web アプリケーションに届く前に、何か問題が発生した場合に情報を提供できるからです。web.config のエラーなど、Web アプリケーションのグローバル エラーのシナリオを処理します。

于 2012-10-20T06:14:35.027 に答える
2

ASP.NET Web API のトレースごとに ASP.NET Web API でトレースを有効にすると、組み込みのトレース インフラストラクチャによって必要な情報がログに記録されます。

コンテンツ ネゴシエーションに失敗する不正なリクエストの場合、DefaultContentNegotiator で HttpError が発生します。

このタイプのエラーの単純なトレースの例を次に示します。

DefaultContentNegotiator;Negotiate;Type='HttpError', formatters=[JsonMediaTypeFormatterTracer, XmlMediaTypeFormatterTracer, FormUrlEncodedMediaTypeFormatterTracer, FormUrlEncodedMediaTypeFormatterTracer]

トレース ライターには、その入力としてTraceRecordが与えられます。これには、要求情報と、必要に応じて使用するカスタム情報が含まれます。

Web API は、構成したトレース ライターを使用して、要求のライフサイクル全体で情報をトレースします。トレース ライターを使用して、ライフサイクル イベントと独自のコントローラー コードの両方をトレースできます。

于 2012-10-19T17:00:25.443 に答える