感谢您的关注!
背景
我正在开发一个 MVC4 .NET 应用程序,并编写了一个过滤器来捕获所有错误(应用程序范围内),记录所述错误,然后通过 HTML 格式的电子邮件将它们报告给开发团队。
我编写的过滤器获取 HttpActionExecutedContext 并从那里我可以导出异常、堆栈跟踪、调用的方法以及一堆其他有用的信息。
我访问的大部分信息都是字符串或 IDictionary 的形式,我使用辅助方法来迭代这些项目并将它们放入用于报告电子邮件的 HTML 表中。
然而,有一个属性让我很伤心:HttpRequestMessage 属性。
HttpActionExecutedContext 对象(HttpActionExecutedContext.Request.Properties)的这个属性有很多不同类型的嵌套属性。
问题
我遇到了几个障碍,以递归方式遍历此 HttpActionExecutedContext.Request.Properties 对象并将其解析为 KV 对的层次结构。问题是由于空值、类型不匹配等造成的。
这是我从 Request.Properties 获得的当前结果:
MS_HttpContext:
System.Web.HttpContextWrapperMS_RetrieveClientCertificateDelegate:System.Func`2[System.Net.Http.HttpRequestMessage,System.Security.Cryptography.X509Certificates.X509Certificate2]
MS_IsLocal:
未创建值。MS_IncludeErrorDetail:
未创建值。MS_HttpRouteData:System.Web.Http.WebHost.Routing.HostedHttpRouteDataMS_SynchronizationContext:
System.Web.AspNetSynchronizationContextMS_HttpConfiguration:System.Web.Http.HttpConfiguration
MS_DependencyScope:
System.Web.Http.Dependencies.EmptyResolverMS_DisposableRequestResources:>System.Collections.Generic.List`1[System.IDisposable]
所以你可以看到,就价值而言,我真正得到的只是type
财产的价值。我需要value
. 如果该值是嵌套字典或其他东西,那很好,但我需要遍历它并记录它的 KV 对,因为只给我对象的类型是没有用的。
问题
我如何递归地遍历这个对象并最终得到一个 KV 对的字典(其中一些值本身就是字典)?是否有我缺少的辅助类或某种动态方法?