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.