如何在C#中递归遍历和记录HttpRequestMessage的属性?

时间:2013-03-06 14:35:08

标签: c# asp.net-mvc http asp.net-web-api expandoobject

感谢您的期待!

背景

我正在开发一个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:
  不会创建值。

     

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 个答案:

答案 0 :(得分:1)

为什么不使用像JSON.NET这样的东西让它将对象转换为json。然后,您可以使用该json数据并设置一些嵌套限制,或者您可以记录整个json字符串本身。