Максимальна довжина запиту перевищена


1049

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

Як це виправити?

Відповіді:


1970

Якщо ви використовуєте 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" ExecuTimeout = "180" />
Surya sasidhar

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
Деспертар

18
Варто ще раз зазначити, що maxAllowedContentLength знаходиться в байтах, а не в кілобайтах. Дві значення не повинні бути однаковими, оскільки вони не є однаковою одиницею вимірювання.
Пандінкус

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 KILOBYTES , а maxAllowedContentLength - 1073741824 BYTES .

Я знаю, що це очевидно, але просто не помітити.


5
Для когось це може стосуватись: Ця відповідь також чудово працює для IIS-Express (asp.net-веб-сторінки з WebMatrix)
VoidKing

5
Так, це відповідь, яка працювала на мене замість відповіді Сачина. Він працює і на Azure.
Гаутам Джайн

5
Це, безумовно, правильна відповідь ... обидва записи повинні бути присутніми. У випадку MVC 3 він може бути в кореневому web.configфайлі проекту .
Мігель Анджело

2
Ще одна важлива річ - це "страта часу", про яку згадує Карл
Мухаммед Амін

26
Мені довелося поєднувати це з існуючим рядком для: <httpRuntime targetFramework = "4.5" maxRequestLength = "1048576" виконанняTimeout = "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 (і, отже, робота з маршрутами)?
Luuk Krijnen

1
Це буде URL-адреса, відповідна маршруту, на який встановлено дію для завантаження. У моєму випадку у мене є контролер Документів з дією під назвою Завантажити, на яку я розміщую форму. У вашому випадку це було б будь-яким 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
Bishop

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 (виражене в kb) повинно відповідати maxAllowedContentLength (виражається в байтах).
  • більшу частину часу ваш розділ system.web вже може містити "httpRuntime". встановіть свою targetFramework на використану вами версію .net.

Примітки:

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

детальніше MSDN


8

maxRequestLength (довжина в КБ) Тут як колишній Я взяв 1024 (1 МБ) maxAllowedContentLength (довжина в байтах) повинен бути таким же, як ваш maxRequestLength (1048576 байт = 1 МБ).

<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

Якщо у вас є запит на отримання програми на сайті, переконайтеся, що ви встановили maxRequestLength у кореневій веб.config. Здається, що maxRequestLength в web.config додатків ігнорується.


Якби я міг би схвалити це не раз, Це витратив день мого життя. Якщо у вас є віртуальна підпрограма dir, вам потрібно розмістити httpRuntime maxRequestLength="###і requestLimits maxAllowedContentLengthв веб-конфігурацію на рівні кореня, а не на рівні додатка.
ніквайси

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тег.
Mathias Lykkegaard Lorenzen
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.