2013-03-06 91 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字符串本身。