2012-05-16 46 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)純粹在訪問的情況下,反射速度確實很慢,但是在訪問文件甚至數據庫的數據驅動網站的全部背景下,我們可能只是整個頁面處理時間的一小部分。 –