如何查看HTMLTextWriter的内容?

时间:2013-04-15 21:42:12

标签: asp.net c#-4.0 htmltextwriter

我有一个HtmlTextWriter对象(theWriter)被传递给一个方法。此方法位于中间层。我想在调试模式下阅读theWriter的内容。方法是:

protected override void Render (HtmlTextWriter theWriter) {...}

继承自Panel:WebControl。

我试过

theWriter.Flush();
theWriter.InnerWriter.ToString();

但只输出对象类型:“System.Web.HttpWriter”。我已经看到一些示例在Response对象上使用方法。但是我没有访问此层中的Response。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

InnerWriter是一个TextWriter派生类,它写入一个流。您必须打开该流并从中读取数据。是否可以打开和读取该流是一个悬而未决的问题,并且在很大程度上取决于它是什么类型的流。

因此,要使用您的示例,theWriter.InnerWriter是从TextWriter派生的对象。但是你不知道是什么类型,TextWriter本身并没有暴露底层流。

现在,如果InnerWriterStreamWriter,那么您可以写下:

var sWriter = theWriter.InnerWriter as StreamWriter;
var stream = sWriter.BaseStream;
var savePosition = stream.Position;
stream.Position = 0;
// now, you can read the stream
// when you're done reading the stream, be sure to reset its position
stream.Position = savePosition;
但是,你必须非常小心。如果您获得基本流,然后使用StreamReader打开它,则关闭StreamReader将关闭基础流。然后,当您下次尝试写入时,HtmlTextWriter将抛出异常。

您也可能无法阅读信息流。例如,如果基本流是NetworkStream,则无法读取它。或者它可以是FileStream,只能写入。没有好的通用方法可以做到这一点,因为它完全不仅取决于特定的TextWriter派生类,还取决于TextWriter正在写入的流。

例如,HtmlTextWriter可以写入StreamWriter,该BufferedStream连接到GZipStream连接到MemoryStream,{{1}}最终写入{{1}} }}

因此,一般情况下,我建议您寻找其他问题的解决方案。除非您确定底层流是什么,并且您可以阅读它......并且事情不会在您身上发生变化。