【发布时间】:2019-02-28 22:09:34
【问题描述】:
我尝试记录我的HttpListener 的每个请求和响应。
对于HttpListenerContext.Request.InputStream,就这么简单:
var finfoIn = context.Request.GetType().GetField("m_RequestStream", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
context.Request.InputStream.CopyTo(memstreamIn);
memstreamIn.Seek(0, System.IO.SeekOrigin.Begin);
var reader = new System.IO.StreamReader(memstreamIn, Encoding.Unicode);
this.Log(reader.ReadToEnd()); //Actual log method that prints to console
memstreamIn.Seek(0, System.IO.SeekOrigin.Begin);
finfoIn.SetValue(context.Request, memstreamIn);
但是,由于 HttpListenerContext.Response.OutputStream 的字段类型为 (internal) System.Net.HttpResponseStream,因此无法使用上述技巧。
任何人都有一些解决方案来允许记录OutputStream?
【问题讨论】:
-
你为什么要这样做?您是否需要在最终应用程序中进行此日志记录?您知道可以配置跟踪以输出所有网络数据吗?另外,为什么你认为这个技巧对于输出流是不可能的?
-
最终应用中不需要这种日志记录。仅用于在开发(和测试)@CodeCaster 期间进行调试(它包含在
#if DEBUG中) -
问题在于,如果我理解正确,它只会出现在例如的输出窗口中。视觉工作室或我选择的文件内部。但是,我需要它来运行 log 方法(因为它为我添加了一些更重要的调试信息以实际遵循这些请求),这就是我采用这种方法的原因。
-
那么,如果您对 OutputStream 尝试相同的方法会发生什么?真正的问题是什么?
标签: c# reflection outputstream httplistener