2013-03-06 58 views
3

感謝您的期待!如何遞歸遍歷並記錄C#中的HttpRequestMessage的屬性?

背景

我工作的MVC4 .NET應用程序,並寫了一個過濾器來捕獲所有的錯誤(應用程序級),日誌說錯誤,然後通過並報開發團隊的HTML格式電子郵件。

我寫的過濾器選擇了HttpActionExecutedContext,從那裏我可以派生異常,堆棧跟蹤,調用的方法和一堆其他有用的信息。

我訪問的大部分信息都是以字符串或IDictionary的形式存在的,我使用了一個輔助方法來迭代這些項目,並將它們放入報表電子郵件的HTML表格中。

有一個屬性,但是,這讓我很難過:HttpRequestMessage屬性。

HttpActionExecutedContext對象(HttpActionExecutedContext.Request.Properties)的此屬性具有許多不同類型的嵌套屬性。

問題

我遇到了幾個路障,以遞歸方式遍歷這個HttpActionExecutedContext.Request.Properties對象,並將其解析爲KV對的層次結構。問題是由於空值,類型不匹配等原因造成的。

下面是我從Request.Properties獲取當前的結果:

MS_HttpContext:
System.Web.HttpContextWrapper

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

MS_IsLocal:
Value is not created。

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對的字典(與一些值是一個字典本身)結束了?是否有幫助者類或某種我缺少的動態方法?

回答

1

爲什麼不只是使用類似JSON.NET的東西,並讓它將對象轉換爲json。然後,您可以使用該json數據並設置一些嵌套限制,或者您可以記錄整個json字符串本身。