【问题标题】:Serializing HttpContext object to store in a database序列化 HttpContext 对象以存储在数据库中
【发布时间】:2012-10-12 11:27:56
【问题描述】:

我们有一个 C# ASP.Net MVC 网站。我想将 HttpContext.Current.Request 对象中包含的所有内容存储在 SQL Server 的表中以供以后分析。

我尝试将对象序列化为字节数组,然后将其存储在 SQL Server 中的二进制字段中,但是序列化程序不会序列化 HttpContext 对象,因为它没有标记为 Serializable

有没有办法将 System.Web 类标记为可序列化?还是有其他方法可以做到这一点?

【问题讨论】:

  • 花 20 分钟编写代码来获取所有必要的属性?不可能有那么多。
  • 谢谢。你看过吗?有大量的标题等。
  • 重点是,我不知道用户会提前请求什么,并希望将其存储起来以供以后分析。
  • 当然,标题、帖子参数、cookie 等。好吧……也许一个小时!
  • 不要忘记安全性。您可能存储了不想保留的数据,例如表单发布的密码。

标签: c# asp.net-mvc-3 serialization httpcontext


【解决方案1】:

对于生产代码,我不相信您可以更改 HttpContext 的序列化方面。如果这是非生产环境,您可以尝试使用 Reflector 和一些插件等工具修改 Assembly 以插入 Serializable 属性(但这也可能需要在子类上完成)。

可能更简单的选择是使用反射来枚举所有公共和私有字段。您可以将简单类型转换为其字符串表示形式,并在稍微复杂的类上递归。你甚至可以找到一个工具来做到这一点,这个想法可能会被提到询问对象图查看器。

【讨论】:

  • 反射器的好主意。我会考虑使用它!如果可行,我稍后会标记为答案。干杯!
  • @MaxVernon:我认为您需要使用 Refexil 插件来进行更改,并且您还必须通过所有依赖类。不知道如何添加属性,但我很确定这是可能的。
【解决方案2】:

我建议不要存储整个请求,这样会产生太多噪音。

而是选择您想要的信号。那就是专门记录您感兴趣的内容,例如特定变量。

【讨论】:

  • 这是我感兴趣的噪音。标准的东西已经记录了。
猜你喜欢
  • 1970-01-01
  • 2010-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多