3

感谢您的关注!

背景

我正在开发一个 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 对的字典(其中一些值本身就是字典)?是否有我缺少的辅助类或某种动态方法?

4

1 回答 1

1

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

于 2013-03-06T15:17:48.950 回答