如何在c#中递归地遍历并记录HttpRequestMessage的属性?

本文关键字:记录 HttpRequestMessage 属性 遍历 递归 | 更新日期: 2023-09-27 18:02:39

感谢您的关注!

<标题> 的背景

我正在开发一个MVC4 . net应用程序,并编写了一个过滤器来捕获所有错误(应用程序范围内),记录所述错误,然后通过html格式的电子邮件向开发团队报告。

我写的过滤器捡起HttpActionExecutedContext,从那里我可以派生异常,堆栈跟踪,方法调用,和一堆其他有用的信息。

我访问的大多数信息都是字符串或字典的形式,我使用助手方法迭代这些项,并将它们放入报告电子邮件的HTML表中。

有一个属性,然而,这是给我悲伤:HttpRequestMessage属性。

HttpActionExecutedContext对象(HttpActionExecutedContext. request . properties)的这个属性有许多不同类型的嵌套属性。

<标题>

我遇到了几个障碍,以递归的方式遍历这个HttpActionExecutedContext.Request.Properties对象,并将其解析为KV对的层次结构。这些问题是由空值、类型不匹配等引起的。

这是我从请求中得到的当前结果。属性:

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

如何在c#中递归地遍历并记录HttpRequestMessage的属性?

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