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

1050

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

Как я могу это исправить?

Сурья Сасидхар
источник

Ответы:

1973

Если вы используете 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" />
Сурья Сасидхар
11
Значение maxAllowedContentLength должно быть в байтах, а не в килобайтах, поэтому приведенные примеры не эквивалентны.
Мэтью Шарп
33
И с IIS 7.5, и с VS RC 2012 IIS Express мне пришлось установить ОБА из них. HttpRuntime один настраивает максимальную длину ASP.NET, а requestLimits настраивает максимальную длину IIS, stackoverflow.com/questions/6327452/… и forums.iis.net/t/1169846.aspx
Despertar
18
Стоит еще раз указать, что maxAllowedContentLength указывается в байтах, а не в килобайтах. Два значения не должны быть одним и тем же числом, поскольку они не являются одинаковыми единицами измерения.
Pandincus
13
Убедитесь, что вы добавляете эту настройку в основную, Web.configа не в Viewsпапку
Serj Sagan
553

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

В system.web

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

И в system.webServer

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

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

maxRequestLength имеет 1048576 килобайт и maxAllowedContentLength имеет 1073741824 BYTES .

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

Карл
источник
5
Для любого, кого это может касаться: Этот ответ также отлично работает для IIS-Express (asp.net-веб-страниц с WebMatrix)
VoidKing
5
Да, это ответ, который работал для меня вместо ответа Сачина. Это работает на Azure тоже.
Гаутам Джайн
5
Это, безусловно, правильный ответ ... обе записи должны присутствовать. В случае MVC 3 это может быть в корневом web.configфайле проекта .
Мигель Анджело
2
Другая важная вещь - это «ExecutionTimeout», о котором упоминает Карл
Мухаммед Амин
26
Мне пришлось объединить это с существующей строкой для: <httpRuntime targetFramework = "4.5" maxRequestLength = "1048576" executeTimeout = "3600" />
Кен Мак,
195

Возможно, стоит отметить, что вы можете ограничить это изменение 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>
Ник Альбрехт
источник
Хорошее решение думать о месте. Но есть ли путь локации при работе с MVC (и, следовательно, при работе с маршрутами)?
Луук Крийнен,
1
Это будет URL, соответствующий маршруту, для которого установлено действие загрузки. В моем случае у меня есть контроллер Documents с действием Upload, на который я отправляю форму. В вашем случае это будет то, что будет URL вашего действия.
Ник Альбрехт
Для тех, кто любит этот ответ, посмотрите это .
DontVoteMeDown
2
Чувак, ты рок. Извините, но моего маленького голоса было недостаточно.
Николас Петерсен
1
Это будет работать с WebAPI до MVC v5 включительно. После того, как вы нажмете ASP.NET Core с MVC Core, для Kestrel вам нужно будет установить различные параметры.
Ник Альбрехт
44

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

//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 (((System.Web.HttpException)httpException.InnerException).WebEventCode == System.Web.Management.WebEventCodes.RuntimeErrorPostTooLarge)
    {
        //handle the error
        Response.Write("Too big a file, dude"); //for example
    }
}

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

Серж Шульц
источник
1
maxAllowedContentLength должно быть выше, чем (maxRequestLength * 1024) для генерации исключения.
Der_Meister
Этот пост дал мне то, что мне нужно было, чтобы предупредить пользователя, но HttpContext.Current.ClearError()было необходимо для Response.Redirect()правильной работы. С точки зрения web.configэтого работает только с maxRequestLengthатрибутом httpRuntime.
nrod
Проверка размера файла и удобное для пользователя сообщение могут быть выполнены через JS на уровне страницы, используя onchangeсобытие на кнопке загрузки и сравнивая размер файла загрузки с максимальным пределом загрузки.
Альфред Уоллес
29

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

Это объясняется здесь .

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

Дейв
источник
4
Ссылка перенаправляет меня на домашнюю страницу поддержки Microsoft
епископ
1
Может быть, что-то не так. Ссылка перенаправляет сюда
gofr1
22

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

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

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

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

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

<httpRuntime 
    maxRequestLength="1048576"
  />
ЕМА
источник
11

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

<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

BernieSF
источник
8

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>
UniCoder
источник
6

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

NiaoBlush
источник
5

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

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

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

Грэм Лайт
источник
1

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

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

раздел.

Согласно этой статье поддержки Microsoft

ГиперАктив
источник
web.config из вашего собственного проекта должен переопределить их, поэтому я не вижу необходимости вносить изменения applicationHost.config.
bvgheluwe
-3

Могу добавить в конфиг веб без компиляции

<system.web> 
  <httpRuntime maxRequestLength="1024" executionTimeout="3600" /> 
  <compilation debug="true"/> 
</system.web> 
<security> 
  <requestFiltering> 
    <requestLimits maxAllowedContentLength="1048576"/> 
  </requestFiltering> 
</security>
Сезар Мигель
источник
1
executionTimeoutАтрибут не имеет ничего общего с тем, что просят, и ни делает compilationтег.
Матиас Ликкегор Лоренцен