HttpContext.Request.ContentLength всегда 0 для PUT? (Но действует для POST) - PullRequest
0 голосов
/ 16 мая 2019

Мой сайт принимает файлы для загрузки. Файлы могут быть загружены через WebDAV (PUT) или через POST. Для POST мой HttpModule перехватывает запрос и сохраняет ТЕЛО POST в файл на сервере. Для PUT WebDAV обрабатывает создание файла.

Мой HttpModule также регистрирует каждую загрузку файла в своем обработчике события OnEndRequest.

Я обнаружил, что для PUT (WebDAV) оба

 ctx.Request.Headers["Content-Length"]
 ctx.Request.ContentLength

всегда равны нулю, хотя для POST оба содержат длину содержимого тела.

Что мне нужно сделать, чтобы получить длину файла, загруженного через WebDAV?

1 Ответ

0 голосов
/ 16 мая 2019

Когда я писал это, я понял, что для PUT я знаю имя файла, который является PUT для сервера.Поэтому я решил эту проблему с помощью следующего кода:

  if (ctx.Request.ContentLength == 0)
  {
      if (ctx.Request.HttpMethod == "PUT")
      {
          FileInfo fi = new FileInfo(ctx.Items["OutFile"].ToString());
          fileSize = fi.Length;
      }
  }
  else
  {
      fileSize = ctx.Request.ContentLength;
  }

(где ctx.Items ["OutFile"] - это имя файла, который я сохранил из предыдущего обработчика событий.)

Так что это работает для меня сейчас.Тем не менее, было бы неплохо получить эту информацию, не выходя в файловую систему.Если вы знаете, как я могу получить его из контекста выполняющейся в данный момент http-транзакции, буду благодарен за ваш совет.

...