System.Web.HttpRequest. В чем разница между ContentLength, TotalBytes и InputStream.Length? - PullRequest
4 голосов
/ 12 марта 2010

Я ищу ответы на такие вопросы:

  • Для любого данного запроса всегда ли эти три свойства возвращают одно и то же значение?
  • Есть ли у кого-нибудь из них побочные эффекты?
  • Блокирует ли какой-либо из них, пока IIS не получит весь запрос?
  • Приводит ли какой-либо из них загруженные файлы к полной загрузке в память?

Я забочусь об этом, потому что мое веб-приложение отправляет мне электронное письмо, когда запрос занимает слишком много времени для обработки на сервере, и я хочу избежать отправки этого электронного письма для больших запросов, т.е. когда пользователь загружает один или несколько больших файлы.

1 Ответ

2 голосов
/ 12 марта 2010

По данным MSDN:

ContentLength - указывает длину в байтах контента, отправляемого клиентом.
TotalBytes - количество байтов в текущем входном потоке.
InputStream.Length - длина байтов во входном потоке.

Итак, последние два одинаковы. Вот что Reflector говорит о свойстве ContentLength:

public int ContentLength
{
    get
    {
        if ((this._contentLength == -1) && (this._wr != null))
        {
            string knownRequestHeader = this._wr.GetKnownRequestHeader(11);
            if (knownRequestHeader != null)
            {
                try
                {
                    this._contentLength = int.Parse(knownRequestHeader, CultureInfo.InvariantCulture);
                }
                catch
                {
                }
            }
            else if (this._wr.IsEntireEntityBodyIsPreloaded())
            {
                byte[] preloadedEntityBody = this._wr.GetPreloadedEntityBody();
                if (preloadedEntityBody != null)
                {
                    this._contentLength = preloadedEntityBody.Length;
                }
            }
        }
        if (this._contentLength < 0)
        {
            return 0;
        }
        return this._contentLength;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...