Comprimento máximo da solicitação excedido.


1050

Estou recebendo o erro Duração máxima da solicitação excedida quando estou tentando fazer upload de um vídeo no meu site.

Como faço para corrigir isso?

Respostas:


1973

Se você estiver usando o IIS para hospedar seu aplicativo, o tamanho padrão do arquivo de upload será 4 MB. Para aumentá-lo, use esta seção abaixo em seu web.config-

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

Para o IIS7 e superior, você também precisa adicionar as linhas abaixo:

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

Nota :

  • maxRequestLengthé medido em kilobytes
  • maxAllowedContentLengthé medido em bytes

é por isso que os valores diferem neste exemplo de configuração. (Ambos são equivalentes a 1 GB.)


7
Obrigado sachin e eu adicionei algo como <httpRuntime maxRequestLength = "32768" ExecutionTimeout = "180" />
— Surya sasidhar

11
maxAllowedContentLength deve estar em bytes, não em kilobytes, portanto, os exemplos fornecidos não são equivalentes.
— Matthew Sharpe

33
No IIS 7.5 e no VS RC 2012, o IIS Express precisava definir AMBOS. O httpRuntime configura o comprimento máximo do ASP.NET enquanto requestLimits configura o comprimento máximo do IIS, stackoverflow.com/questions/6327452/… e forums.iis.net/t/1169846.aspx
— Despertar

18
Vale ressaltar, novamente, que o maxAllowedContentLength está em bytes, não em kilobytes. Os dois valores não devem ser o mesmo número, porque não são a mesma unidade de medida.
— Pandincus 10/10/12

13
Certifique-se que você está adicionando esta definição para o principal Web.configem vez da uma dentro da Viewspasta
— Serj Sagan

553

Não acho que tenha sido mencionado aqui, mas para que isso funcione, tive que fornecer esses dois valores no web.config:

No system.web

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

E em system.webServer

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

IMPORTANTE : Esses dois valores devem corresponder. Nesse caso, meu upload máximo é de 1024 megabytes.

maxRequestLength possui 1048576 KILOBYTES e maxAllowedContentLength tem 1073741824 BYTES .

Eu sei que é óbvio, mas é fácil ignorar.


5
Para qualquer possa interessar: Essa resposta também funciona perfeitamente para o IIS-Express (asp.net-páginas com WebMatrix)
— VoidKing

5
Sim, essa é a resposta que funcionou para mim, em vez da resposta de Sachin. Também funciona no Azure.
— Gautam Jain 21/03

5
Esta é definitivamente a resposta correta ... ambas as entradas devem estar presentes. No caso do MVC 3, ele pode estar no web.configarquivo raiz do projeto .
— Miguel Angelo

2
Outra coisa importante é o 'executionTimeout' que Karl menciona
— Muhammad Amin

26
Eu tive que combinar isso com uma linha existente para: <httpRuntime targetFramework = "4.5" maxRequestLength = "1048576" executionTimeout = "3600" />
— Ken Mc

195

Pode ser interessante notar que você pode limitar essa alteração ao URL que você espera que seja usado para o upload, e não para todo o site.

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

Nice Solution pensando na localização. Mas existe um caminho de localização ao trabalhar com o MVC (e, portanto, ao trabalhar com rotas)?
— Luuk Krijnen

1
Seria um URL correspondente à rota em que você definiu sua ação de upload. No meu caso, eu tenho um controlador de Documentos com uma ação chamada Upload na qual eu posto o formulário. No seu caso, seria o URL da sua ação.
— Nick Albrecht

Para quem gosta dessa resposta, veja isso .
— DontVoteMeDown

2
Cara, você é demais. Desculpe, mas meu minúsculo voto positivo não foi suficiente.
— Nicholas Petersen

1
Isso funcionará com o WebAPI para até e incluindo o MVC v5. Depois de clicar no ASP.NET Core com o MVC Core, existem diferentes opções que você deve definir para o Kestrel.
— Nick Albrecht

44

E no caso de alguém estar procurando uma maneira de lidar com essa exceção e mostrar uma explicação significativa para o usuário (algo como "Você está fazendo upload de um arquivo muito 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
    }
}

(ASP.NET 4 ou posterior necessário)


1
maxAllowedContentLength deve ser maior que (maxRequestLength * 1024) para a geração da exceção.
— Der_Meister

Esta postagem me forneceu o que eu precisava para avisar o usuário, mas HttpContext.Current.ClearError()era necessário para permitir Response.Redirect()que funcionasse corretamente. Em termos de web.configfunciona apenas com o maxRequestLengthatributo de httpRuntime.
— Nrod 28/11

A validação do tamanho do arquivo e a mensagem amigável ao usuário podem ser feitas via JS no nível da página, usando um onchangeevento no botão de upload e comparando o tamanho do arquivo de upload com o limite máximo de upload.
— Alfred Wallace

29

O tamanho máximo da solicitação é, por padrão, 4MB (4096 KB)

Isso é explicado aqui .

O artigo acima também explica como corrigir esse problema :)


4
O link está me redirecionando para a página de suporte da Microsoft
— Bishop

1
Talvez algo estivesse errado. O link redireciona aqui
— gofr1 07/07

22

Se você não pode atualizar os arquivos de configuração, mas controlar o código que lida com os uploads de arquivos, use HttpContext.Current.Request.GetBufferlessInputStream(true).

O truevalor para o disableMaxRequestLengthparâmetro diz à estrutura para ignorar os limites de solicitação configurados.

Para obter uma descrição detalhada, visite https://msdn.microsoft.com/en-us/library/hh195568(v=vs.110).aspx


IMPRESSIONANTE, então como a resposta principal tem mais de 1.600 votos, e apenas 5? Isso é fantástico, porque, muitas vezes, é apenas uma ação em que queremos isso. Além disso, nenhuma brincar com outras configurações, etc.
— Nicholas Petersen

Era isso que eu estava procurando.
— 22419 Chris Catignani

20

Há um elemento no web.config para configurar o tamanho máximo do arquivo enviado:

<httpRuntime 
    maxRequestLength="1048576"
  />

11

Para resumir todas as respostas em um único local:

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

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

Regras:

  • O valor maxRequestLength (expresso em kb) deve corresponder a maxAllowedContentLength (expresso em bytes).
  • Na maioria das vezes, a seção system.web já pode conter um "httpRuntime". defina seu targetFramework para a versão do seu .net usado.

Notas:

  • o valor padrão para maxRequestLength é 4096 (4mb). o valor máximo é 2.147.483.647
  • o valor padrão para maxAllowedContentLength é 30.000.000 (cerca de 30mb). o valor máximo é 4.294.967.295

mais informações MSDN


8

maxRequestLength (comprimento em KB) Aqui como ex. Peguei 1024 (1MB) maxAllowedContentLength (comprimento em bytes) deve ser igual ao seu 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

Isso me incomodou por dias também. Modifiquei o arquivo Web.config, mas não funcionou. Descobriu-se que existem dois arquivos Web.config no meu projeto e devo modificar o arquivo no diretório ROOT , e não os outros. Espero que isso seja útil.


5

Se você tiver uma solicitação acessando um aplicativo no site, defina maxRequestLength na raiz web.config. O maxRequestLength no web.config dos aplicativos parece ser ignorado.


Se eu pudesse aprovar isso mais de uma vez, faria. Isso desperdiçou um dia da minha vida. Se você tiver um sub-aplicativo dir virtual, precisará colocar httpRuntime maxRequestLength="###e requestLimits maxAllowedContentLengthem uma configuração da web no nível raiz, não no nível do sub-aplicativo.
— nickvans

1

Fui enganado pelo fato de nosso arquivo web.config possuir várias seções system.web: funcionou quando adicionei <httpRuntime maxRequestLength = "1048576" /> à seção system.web no nível de configuração.


1

Eu tive que editar o C:\Windows\System32\inetsrv\config\applicationHost.configarquivo e adicionar <requestLimits maxAllowedContentLength="1073741824" />no final do ...

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

seção.

Conforme este artigo de suporte da Microsoft


O web.config do seu próprio projeto deve substituí-los, portanto não vejo a necessidade de modificar applicationHost.config.
— bvgheluwe

-3

Eu posso adicionar à web de configuração descompilada

<system.web> 
  <httpRuntime maxRequestLength="1024" executionTimeout="3600" /> 
  <compilation debug="true"/> 
</system.web> 
<security> 
  <requestFiltering> 
    <requestLimits maxAllowedContentLength="1048576"/> 
  </requestFiltering> 
</security>

1
O executionTimeoutatributo não tem nada a ver com o que é solicitado, nem a compilationtag.
— Mathias Lykkegaard Lorenzen
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.