如何获得HttpResponse大小

时间:2012-05-16 19:04:07

标签: c# asp.net-2.0 httpresponse

我正在寻找一种方法来获取发送到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 个答案:

答案 0 :(得分:3)

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

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

这不太理想,但你可以通过反思来调用这个方法。