3

見てくれてありがとう!

バックグラウンド

私はMVC4.NETアプリケーションに取り組んでおり、すべてのエラー(アプリケーション全体)をキャッチし、そのエラーをログに記録してから、HTML形式の電子メールで開発チームに報告するフィルターを作成しました。

私が書いたフィルターはHttpActionExecutedContextを取得し、そこから例外、スタックトレース、呼び出されたメソッド、およびその他の有用な情報を導き出すことができます。

アクセスする情報のほとんどは文字列またはIDictionaryの形式であり、ヘルパーメソッドを使用してこれらのアイテムを反復処理し、レポートの電子メール用のHTMLテーブルに配置します。

ただし、私に悲しみを与えているプロパティが1つあります。それは、HttpRequestMessageプロパティです。

HttpActionExecutedContextオブジェクト(HttpActionExecutedContext.Request.Properties)のこのプロパティには、さまざまなタイプのネストされたプロパティが多数あります。

問題

このHttpActionExecutedContext.Request.Propertiesオブジェクトを再帰的にトラバースし、KVペアの階層に解決するために、いくつかの障害に直面しています。問題は、null値、タイプの不一致などが原因です。

これが、Request.Propertiesから取得している現在の結果です。

MS_HttpContext:
System.Web.HttpContextWrapper

MS_RetrieveClientCertificateDelegate:System.Func`2 [System.Net.Http.HttpRequestMessage、System.Security.Cryptography.X509Certificates.X509Certificate2]

MS_IsLocal:
値は作成されません。

MS_IncludeErrorDetail:
値は作成されません。MS_HttpRouteData:System.Web.Http.WebHost.Routing.HostedHttpRouteData

MS_SynchronizationContext:
System.Web.AspNetSynchronizationContext

MS_HttpConfiguration:System.Web.Http.HttpConfiguration

MS_DependencyScope:
System.Web.Http.Dependencies.EmptyResolver

MS_DisposableRequestResources:> System.Collections.Generic.List`1 [System.IDisposable]

したがって、値に関して私が実際に取り戻しているのはtype、プロパティの値だけであることがわかります。が必要valueです。その値がネストされた辞書などの場合は問題ありませんが、オブジェクトのタイプを指定するだけでは役に立たないため、値をトラバースしてKVペアをログに記録する必要があります。

質問

このオブジェクトを再帰的にトラバースして、KVペアのディクショナリを作成するにはどうすればよいですか(値の一部はディクショナリ自体です)。ヘルパークラスや、不足している動的メソッドのようなものはありますか?

4

1 に答える 1

1

JSON.NETのようなものを使用して、オブジェクトをjsonに変換してみませんか。次に、そのjsonデータを操作してネスト制限を設定するか、json文字列全体をログに記録することができます。

于 2013-03-06T15:17:48.950 に答える