2012-05-16 11 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) Отражение, безусловно, происходит медленно в контексте доступа, но в полном контексте веб-сайта, управляемого данными, который обращается к файлам или даже к базе данных, мы, вероятно, говорим о очень небольшой части общего времени обработки страницы. –

 Смежные вопросы

  • Нет связанных вопросов^_^