2012-05-16 48 views
3

我正在寻找一种方法来获取发送到ASP.NET 2.0响应中某个点的字节数,以便我可以将此数字写入响应。喜欢的东西:如何获得HttpResponse的大小

Page.aspx:

<script runat="server"> 
    private string GetResponseSize() 
    { 
     int nCurrentResponseSize = ...; // what goes here? 
     return (nCurrentResponseSize.ToString()); 
    } 
</script> 
<html> 
    <head runat="server"><title>test</title></head> 
    <body> 
    <div>Size 1: <%= GetResponseSize() %></div> 
    <br /> 
    <div>Size 2: <%= GetResponseSize() %></div> 
    </body> 
</html> 

的问题是,HttpResponse.OutputStream.Length不支持(NetworkStream不支持它)。

我可以实现一个HtmlTextWriter来覆盖页面的默认值和计数字节,但ASP.NET中的某些内容应该已经有了计数,我正在尝试查看是否有可能得到它。

我想避免的是解决方案,它涉及获取所有数据,然后将其解析到特定点以查找到该点的大小。到目前为止,我的大部分搜索只是提出了这些解决方案。

回答

3

使用dotPeek我发现的HttpResponse具有一个用于计算控件的大小进行跟踪内部GetBufferedLength方法:

int bufferedLength1 = httpContext.Response.GetBufferedLength(); 
this.RenderControlInternal(writer, adapter); 
int bufferedLength2 = httpContext.Response.GetBufferedLength(); 

这不是理想的,但你可以通过打电话反映此方法。

+0

感谢您的回复 - 不幸的是,我也需要快速做到这一点,所以反思并不是真正的选择。无论如何,我会检查它,看看我是否从中学到了一些东西 - 我想知道它是否保留了字符数或字节数。 – xxbbcc

+0

1)我可以问为什么你需要这个? –

+0

2)纯粹在访问的情况下,反射速度确实很慢,但是在访问文件甚至数据库的数据驱动网站的全部背景下,我们可能只是整个页面处理时间的一小部分。 –