如何获取HttpResponse的大小

3
我正在寻找一种方法来获取在ASP.NET 2.0响应中发送到某个点的字节数,以便我可以将此数字写入响应。类似于以下内容:
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内部应该已经拥有这个数字,我正在尝试看看是否可能获取它。
我想避免的是涉及获取所有数据,然后解析到某个点以查找到该点的大小的解决方案。到目前为止,我搜索到的大多数结果都只提供了这种类型的解决方案。
1个回答

3

我使用dotPeek发现HttpResponse有一个内部的GetBufferedLength方法,用于计算追踪控制器的大小:

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

虽然这并不是最理想的方法,但你可以通过反射来调用此方法。


谢谢您的回复 - 不幸的是,我也需要快速完成这个任务,所以反射不是一个真正的选择。无论如何,我会去看看它是否能让我学到一些东西 - 我想知道它是否保留字符计数还是字节计数。 - xxbbcc
我可以问一下,你为什么需要这个吗? - b_levitt
  1. 反射在访问上肯定是慢的,但在一个访问文件甚至数据库的数据驱动网站的完整上下文中,我们可能只谈论总页面处理时间的一小部分。
- b_levitt
我需要这个是因为我正在开发一个工具,它位于HTTP管道中并检查/修改流量。 它需要尽可能快,以仅引入最小的性能下降。 - xxbbcc
有趣。基于那个描述,也许考虑使用HttpFilter?http://msdn.microsoft.com/en-us/library/system.web.httpresponse.filter.aspx 尽管,你原来问题中的UI组件让我有些困惑。你只是为了调试目的而使用它吗? - b_levitt
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接