Превышена максимальная длина запроса.

955

Я получаю сообщение об ошибке Максимальная длина запроса, когда я пытаюсь загрузить видео на своем сайте.

Как это исправить?

Теги:
file-upload
iis

15 ответов

1668
Лучший ответ

Если вы используете IIS для размещения своего приложения, то размер файла для загрузки по умолчанию составляет 4 МБ. Чтобы увеличить его, используйте этот раздел ниже в вашем web.config -

<configuration>
    <system.web>
        <httpRuntime maxRequestLength="1048576" />
    </system.web>
</configuration>

Для IIS7 и выше, вам также необходимо добавить строки ниже:

 <system.webServer>
   <security>
      <requestFiltering>
         <requestLimits maxAllowedContentLength="1073741824" />
      </requestFiltering>
   </security>
 </system.webServer>

Примечание:

  • maxRequestLength измеряется в килобайтах
  • maxAllowedContentLength измеряется в байтах

именно поэтому значения отличаются в этом примере конфигурации. (Оба эквивалентны 1 ГБ)

  • 7
    Спасибо, Сачин, и я добавил что-то вроде <httpRuntime maxRequestLength = "32768" executeTimeout = "180" />
  • 0
    @ Surya- Длина в килобайтах. Таким образом, вы можете установить любой размер в MaxRequestLength. Мой пример устанавливает размер 1 ГБ, ваш 32 МБ
Показать ещё 18 комментариев
491

Я не думаю, что это упоминалось здесь, но чтобы это работало, я должен был предоставить оба этих значения в файле web.config:

В system.web

<httpRuntime maxRequestLength="1048576" executionTimeout="3600" />

И в system.webServer

<security>
    <requestFiltering>
        <requestLimits maxAllowedContentLength="1073741824" />
    </requestFiltering>
</security>

ВАЖНО: Оба эти значения должны совпадать. В этом случае максимальная загрузка составляет 1024 мегабайта.

maxRequestLength имеет 1048576 KILOBYTES, а maxAllowedContentLength имеет 1073741824 BYTES.

Я знаю, что это очевидно, но легко пропустить.

  • 5
    Для любого, кого это может касаться: Этот ответ также отлично работает для IIS-Express (asp.net-веб-страниц с WebMatrix)
  • 5
    Да, это ответ, который работал для меня вместо ответа Сачина. Это работает на Azure тоже.
Показать ещё 9 комментариев
186

Возможно, стоит отметить, что вы можете ограничить это изменение URL, который вы ожидаете использовать для загрузки, а не всего вашего сайта.

<location path="Documents/Upload">
  <system.web>
    <!-- 50MB in kilobytes, default is 4096 or 4MB-->
    <httpRuntime maxRequestLength="51200" />
  </system.web>
  <system.webServer>
    <security>
      <requestFiltering>
        <!-- 50MB in bytes, default is 30000000 or approx. 28.6102 Mb-->
        <requestLimits maxAllowedContentLength="52428800" /> 
      </requestFiltering>
    </security>
  </system.webServer>
</location>
  • 0
    Хорошее решение, думая о месте. Но есть ли путь локации при работе с MVC (и, следовательно, при работе с маршрутами)?
  • 1
    Это будет URL, соответствующий маршруту, для которого установлено действие загрузки. В моем случае у меня есть контроллер Documents с действием Upload, на который я отправляю форму. В вашем случае это будет то, что будет URL вашего действия.
Показать ещё 8 комментариев
38

И на всякий случай кто-то ищет способ справиться с этим исключением и показать содержательное объяснение пользователю (что-то вроде "Вы загружаете слишком большой файл" ):

//Global.asax
private void Application_Error(object sender, EventArgs e)
{
    var ex = Server.GetLastError();
    var httpException = ex as HttpException ?? ex.InnerException as HttpException;
    if(httpException == null) return;

    if(httpException.WebEventCode == WebEventCodes.RuntimeErrorPostTooLarge)
    {
        //handle the error
        Response.Write("Too big a file, dude"); //for example
    }
}

(требуется ASP.NET 4 или более поздняя версия)

  • 1
    maxAllowedContentLength должно быть выше, чем (maxRequestLength * 1024) для генерации исключения.
  • 0
    Этот пост дал мне то, что мне нужно было, чтобы предупредить пользователя, но HttpContext.Current.ClearError() был необходим для правильной работы Response.Redirect() . С точки зрения web.config она работает только с maxRequestLength атрибутом httpRuntime .
Показать ещё 1 комментарий
24

Максимальный размер запроса по умолчанию равен 4 МБ (4096 КБ)

Это объясняется здесь: http://support.microsoft.com/default.aspx?scid=kb;EN-US;295626

В приведенной выше статье также объясняется, как исправить эту проблему:)

  • 4
    Ссылка перенаправляет меня на главную страницу поддержки Microsoft
  • 0
    Может быть, что-то не так. Ссылка перенаправляет сюда
18

В файле web.config есть элемент для настройки максимального размера загруженного файла:

<httpRuntime 
    maxRequestLength="1048576"
  />
11

Если вы не можете обновить файлы конфигурации, но управляете кодом, который обрабатывает загрузку файлов, используйте HttpContext.Current.Request.GetBufferlessInputStream(true).

true значение параметра disableMaxRequestLength указывает платформе игнорировать настроенные пределы запросов.

Для подробного описания посетите https://msdn.microsoft.com/en-us/library/hh195568(v=vs.110).aspx

  • 0
    УДИВИТЕЛЬНО, так как у верхнего ответа> 1600 голосов, а это только 5? Это потрясающе, потому что так часто, мы хотим, чтобы это было всего лишь одно действие. Далее не стоит возиться с другими настройками и т. Д.
  • 0
    Это то, что я искал.
7

maxRequestLength (длина в КБ) Здесь как ex. Я взял 1024 (1MB) maxAllowedContentLength (длина в байтах) должен быть таким же, как ваш maxRequestLength (1048576 bytes = 1MB).

<system.web>
   <httpRuntime maxRequestLength="1024" executionTimeout="3600" />
</system.web>

<system.webServer>
   <security>
      <requestFiltering>
          <requestLimits maxAllowedContentLength="1048576"/>
      </requestFiltering>
   </security>
</system.webServer>
6

Это беспокоило меня и в течение нескольких дней. Я изменил файл Web.config, но он не сработал. Оказалось, что в моем проекте есть два файла Web.config, и я должен изменить его в директории ROOT, а не в других. Надеюсь, это было бы полезно.

5

Чтобы суммировать все ответы в одном месте:

<system.web>
  <httpRuntime targetFramework="4.5.2" maxRequestLength="1048576"/>
</system.web>

<system.webServer>
  <security>
    <requestFiltering>
      <requestLimits maxAllowedContentLength="1073741824" />
    </requestFiltering>
  </security>
</system.webServer>

Правила:

  • Значение maxRequestLength (в килобайтах) должно совпадать с maxAllowedContentLength (в байтах).
  • Большую часть времени ваш раздел system.web может уже содержать "httpRuntime". установите для targetFramework версию используемой .net.

Заметки:

  • значение по умолчанию для maxRequestLength составляет 4096 (4 МБ). максимальное значение - 2 147 483 647
  • значение по умолчанию для maxAllowedContentLength составляет 30 000 000 (около 30 МБ). максимальное значение 4 294 967 295

больше информации MSDN

5

Если у вас есть запрос на приложение на сайте, убедитесь, что вы установили maxRequestLength в корневой web.config. Значение maxRequestLength в приложениях web.config, похоже, игнорируется.

  • 0
    Если бы я мог сказать это несколько раз, я бы это сделал. Это потраченный впустую день моей жизни. Если у вас есть виртуальное httpRuntime maxRequestLength="### dir-приложение, вы должны поместить httpRuntime maxRequestLength="### и requestLimits maxAllowedContentLength в веб-конфигурацию на корневом уровне, а не на уровне requestLimits maxAllowedContentLength приложения.
1

Я был спокоен тем фактом, что наш файл web.config имеет несколько разделов system.web: он работал, когда я добавил < httpRuntime maxRequestLength = "1048576" /" > в разделе system.web, который находится на уровне конфигурации.

0

Мне пришлось отредактировать файл C:\Windows\System32\inetsrv\config\applicationHost.config и добавить <requestLimits maxAllowedContentLength="1073741824" /> в конец...

<configuration>
    <system.webServer>
        <security>
            <requestFiltering>

раздела.

По Эта статья поддержки Microsoft

-1

Я могу добавить в config web uncompiled

<system.web> 
  <httpRuntime maxRequestLength="1024" executionTimeout="3600" /> 
  <compilation debug="true"/> 
</system.web> 
<security> 
  <requestFiltering> 
    <requestLimits maxAllowedContentLength="1048576"/> 
  </requestFiltering> 
</security>
  • 0
    executionTimeout атрибут не имеет ничего общего с тем, что просим, и ни делает compilation тег.
-20

Пожалуйста, проверьте этот демон код, чтобы решить вашу проблему. Скопируйте его, это файл web.config. .

<system.web>
     <httpRuntime executionTimeout="3600" maxRequestLength="102400" requestLengthDiskThreshold="80" useFullyQualifiedRedirectUrl="false"
     minFreeThreads="8" minLocalRequestFreeThreads="4" appRequestQueueLimit="100" enableKernelOutputCache="true" enableVersionHeader="true"
     requireRootedSaveAsPath="true" enable="true" shutdownTimeout="90" delayNotificationTimeout="5" waitChangeNotification="0"
     maxWaitChangeNotification="0" enableHeaderChecking="true" sendCacheControlHeader="true" apartmentThreading="false" />
<system.web>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню