Longitud de solicitud máxima excedida.

1050

Recibo el error Se excedió la longitud máxima de la solicitud cuando intento cargar un video en mi sitio.

¿Cómo puedo solucionar esto?

Surya sasidhar
fuente

Respuestas:

1973

Si está utilizando IIS para alojar su aplicación, el tamaño predeterminado del archivo de carga es de 4 MB. Para aumentarlo, utilice esta sección a continuación en su web.config-

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

Para IIS7 y superior, también debe agregar las siguientes líneas:

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

Nota :

  • maxRequestLengthse mide en kilobytes
  • maxAllowedContentLengthse mide en bytes

Es por eso que los valores difieren en este ejemplo de configuración. (Ambos equivalen a 1 GB).

Sachin Shanbhag
fuente
77
Gracias sachin y agregué algo como <httpRuntime maxRequestLength = "32768" executeTimeout = "180" />
Surya sasidhar
11
maxAllowedContentLength debe estar en bytes, no en kilobytes, por lo que los ejemplos proporcionados no son equivalentes.
Matthew Sharpe
33
Con IIS 7.5 y VS RC 2012 IIS Express tuve que configurar AMBOS de estos. HttpRuntime one configura la longitud máxima de ASP.NET mientras requestLimits configura la longitud máxima de IIS, stackoverflow.com/questions/6327452/… y forums.iis.net/t/1169846.aspx
Despertar
18
Vale la pena señalar, nuevamente, que maxAllowedContentLength está en bytes, no en kilobytes. Los dos valores no deben ser el mismo número, porque no son la misma unidad de medida.
Pandincus
13
Asegúrese de agregar esta configuración a la página principal en Web.configlugar de la que está dentro de la Viewscarpeta
Serj Sagan
553

No creo que se haya mencionado aquí, pero para que esto funcione, tuve que proporcionar ambos valores en la web.config:

En system.web

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

Y en system.webServer

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

IMPORTANTE : Ambos valores deben coincidir. En este caso, mi carga máxima es de 1024 megabytes.

maxRequestLength tiene 1048576 KILOBYTES , y maxAllowedContentLength tiene 1073741824 BYTES .

Sé que es obvio, pero es fácil pasarlo por alto.

Karl
fuente
55
A cualquiera que le pueda interesar: esta respuesta también funciona perfectamente para IIS-Express (asp.net-páginas web con WebMatrix)
VoidKing
55
Sí, esta es la respuesta que funcionó para mí en lugar de la respuesta de Sachin. Funciona en Azure también.
Gautam Jain
55
Esta es definitivamente la respuesta correcta ... ambas entradas deben estar presentes. En el caso de MVC 3, puede estar en el web.configarchivo raíz del proyecto .
Miguel Angelo
2
Otra cosa importante es el "tiempo de ejecución" que Karl menciona
Muhammad Amin
26
Tuve que combinar esto con una línea existente para: <httpRuntime targetFramework = "4.5" maxRequestLength = "1048576" executeTimeout = "3600" />
Ken Mc
195

Vale la pena señalar que es posible que desee limitar este cambio a la URL que espera utilizar para la carga en lugar de todo su sitio.

<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>
Nick Albrecht
fuente
Buena solución pensando en la ubicación. ¿Pero hay una ruta de ubicación cuando se trabaja con MVC (y, por lo tanto, se trabaja con rutas)?
Luuk Krijnen
1
Sería una URL correspondiente a la ruta en la que tiene configurada su acción de carga. En mi caso, tengo un controlador de Documentos con una acción llamada Cargar en la que publico el formulario. En su caso, sería la URL de su acción.
Nick Albrecht
Para cualquiera a quien le guste esta respuesta, vea esto .
DontVoteMeDown
2
Amigo, tu rock. Lo siento, pero mi pequeño voto no fue suficiente.
Nicholas Petersen
1
Esto funcionará con WebAPI hasta e incluyendo MVC v5. Una vez que presione ASP.NET Core con MVC Core, existen diferentes opciones que debe configurar para Kestrel.
Nick Albrecht
44

Y en caso de que alguien esté buscando una manera de manejar esta excepción y mostrar una explicación significativa al usuario (algo como "Estás cargando un archivo que es demasiado grande"):

//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
    }
}

(Se requiere ASP.NET 4 o posterior)

Serge Shultz
fuente
1
maxAllowedContentLength debe ser superior a (maxRequestLength * 1024) para la generación de excepciones.
Der_Meister
Esta publicación me dio lo que necesitaba para advertir al usuario, pero HttpContext.Current.ClearError()era necesario para permitir Response.Redirect()que funcione correctamente. En términos de web.configfunciona solo con el maxRequestLengthatributo de httpRuntime.
nrod
La validación del tamaño del archivo y el mensaje fácil de usar se pueden hacer a través de JS a nivel de página utilizando un onchangeevento en el botón de carga y comparando el tamaño del archivo de carga con el límite máximo de carga.
Alfred Wallace
29

El tamaño máximo de la solicitud es, por defecto, 4MB (4096 KB)

Esto se explica aquí .

El artículo anterior también explica cómo solucionar este problema :)

Dave
fuente
44
El enlace me está redirigiendo a la página de inicio de soporte de microsoft
Bishop
1
Quizás algo estaba mal. El enlace redirige aquí
gofr1
22

Si no puede actualizar los archivos de configuración pero controla el código que maneja el uso de carga de archivos HttpContext.Current.Request.GetBufferlessInputStream(true).

El truevalor del disableMaxRequestLengthparámetro le dice al marco que ignore los límites de solicitud configurados.

Para obtener una descripción detallada, visite https://msdn.microsoft.com/en-us/library/hh195568(v=vs.110).aspx

Sergey Tarasov
fuente
IMPRESIONANTE, entonces, ¿cómo la respuesta principal tiene> 1600 votos, y esto solo 5? Esto es excelente, porque muy a menudo, es solo una acción en la que queremos esto. Además, no te metas con otras configuraciones, etc.
Nicholas Petersen
Esto es lo que estaba buscando.
Chris Catignani
20

Hay un elemento en web.config para configurar el tamaño máximo del archivo cargado:

<httpRuntime 
    maxRequestLength="1048576"
  />
ema
fuente
11

Para resumir todas las respuestas en un solo lugar:

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

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

Reglas:

  • El valor maxRequestLength (expresado en kb) debe coincidir con maxAllowedContentLength (expresado en bytes).
  • la mayoría de las veces su sección system.web ya puede contener un "httpRuntime". establezca su TargetFramework a la versión de su .net utilizada.

Notas:

  • El valor predeterminado para maxRequestLength es 4096 (4mb). el valor máximo es 2,147,483,647
  • El valor predeterminado para maxAllowedContentLength es 30,000,000 (alrededor de 30mb). el valor máximo es 4,294,967,295

más información MSDN

BernieSF
fuente
8

maxRequestLength (longitud en KB) Aquí como ej. Tomé 1024 (1 MB) maxAllowedContentLength (longitud en bytes) debería ser el mismo que su maxRequestLength (1048576 bytes = 1 MB).

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

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

También me molestó durante días. Modifiqué el archivo Web.config pero no funcionó. Resultó que hay dos archivos Web.config en mi proyecto, y debería modificar uno en el directorio ROOT , no los otros. Espero que esto sea útil.

NiaoBlush
fuente
5

Si tiene una solicitud que va a una aplicación en el sitio, asegúrese de configurar maxRequestLength en la raíz web.config. Parece que se ignora maxRequestLength en el archivo web.config de la aplicación.

mhenry1384
fuente
Si pudiera votar esto más de una vez, lo haría. Esto desperdició un día de mi vida. Si usted tiene un directorio sub-aplicación virtual, usted tiene que poner la httpRuntime maxRequestLength="###y requestLimits maxAllowedContentLengthen un web.config en la raíz, no en el nivel sub-aplicación.
nickvans
1

Me tropecé con el hecho de que nuestro archivo web.config tiene múltiples secciones system.web: funcionó cuando agregué <httpRuntime maxRequestLength = "1048576" /> a la sección system.web que en el nivel de configuración.

Graham Laight
fuente
1

Tuve que editar el C:\Windows\System32\inetsrv\config\applicationHost.configarchivo y agregarlo <requestLimits maxAllowedContentLength="1073741824" />al final del ...

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

sección.

Según este artículo de soporte de Microsoft

Hiperactivo
fuente
web.config de su propio proyecto debería anular estos, por lo que no veo la necesidad de modificarlos applicationHost.config.
bvgheluwe
-3

Puedo agregar a la configuración web sin compilar

<system.web> 
  <httpRuntime maxRequestLength="1024" executionTimeout="3600" /> 
  <compilation debug="true"/> 
</system.web> 
<security> 
  <requestFiltering> 
    <requestLimits maxAllowedContentLength="1048576"/> 
  </requestFiltering> 
</security>
Cesar Miguel
fuente
1
El executionTimeoutatributo no tiene nada que ver con lo que se solicita, y tampoco la compilationetiqueta.
Mathias Lykkegaard Lorenzen