3

ASP.NET 2.0 応答の特定の時点までに送信されたバイト数を取得して、この数を応答に書き込む方法を探しています。何かのようなもの:

ページ.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 内の何かには既にカウントが含まれているはずであり、それを取得できるかどうかを確認しようとしています。

私が避けたいのは、すべてのデータを取得し、特定のポイントまで解析してそのポイントまでのサイズを見つけることを含むソリューションです。これまでのところ、私の検索のほとんどは、これらの種類のソリューションしか見つかりませんでした.

4

1 に答える 1

3

dotPeek を使用して、HttpResponse には、トレース用のコントロールのサイズを計算するために使用される内部 GetBufferedLength メソッドがあることがわかりました。

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

理想的ではありませんが、リフレクションを介してこのメ​​ソッドを呼び出すことができます。

于 2012-05-23T20:29:33.417 に答える