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?

Surya sasidhar
fonte

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

Sachin Shanbhag
fonte
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.

Karl
fonte
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>
Nick Albrecht
fonte
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)

Serge Shultz
fonte
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 :)

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

Sergey Tarasov
fonte
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"
  />
ema
fonte
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

BernieSF
fonte
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>
UniCoder
fonte
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.

NiaoBlush
fonte
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.

mhenry1384
fonte
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.

Graham Laight
fonte
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

Hiperativo
fonte
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>
Cesar Miguel
fonte
1
O executionTimeoutatributo não tem nada a ver com o que é solicitado, nem a compilationtag.
Mathias Lykkegaard Lorenzen