Lunghezza massima richiesta superata.


1050

Ricevo l'errore Lunghezza massima richiesta superata quando provo a caricare un video nel mio sito.

Come posso risolvere questo problema?

Risposte:


1973

Se si utilizza IIS per l'hosting dell'applicazione, la dimensione del file di caricamento predefinita è 4 MB. Per aumentarlo, utilizza questa sezione di seguito nella tua web.config-

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

Per IIS7 e versioni successive, devi anche aggiungere le righe seguenti:

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

Nota :

  • maxRequestLengthè misurato in kilobyte
  • maxAllowedContentLengthè misurato in byte

motivo per cui i valori differiscono in questo esempio di configurazione. (Entrambi equivalgono a 1 GB.)


7
Grazie sachin e ho aggiunto qualcosa come <httpRuntime maxRequestLength = "32768" esecuzioneTimeout = "180" />
Surya sasidhar

11
maxAllowedContentLength deve essere in byte, non in kilobyte, quindi gli esempi forniti non sono equivalenti.
Matthew Sharpe,

33
Con IIS 7.5 e VS RC 2012 IIS Express ho dovuto impostare entrambi. Il httpRuntime uno configura la lunghezza massima di ASP.NET mentre RequestLimits configura IIS di lunghezza massima, stackoverflow.com/questions/6327452/... e forums.iis.net/t/1169846.aspx
Despertar

18
Vale la pena sottolineare, ancora una volta, che maxAllowedContentLength è in byte, non in kilobyte. I due valori non dovrebbero essere lo stesso numero, perché non sono la stessa unità di misura.
Pandincus,

13
Assicurati di aggiungere questa impostazione alla principale Web.configanziché a quella all'interno della Viewscartella
Serj Sagan

553

Non penso che sia stato menzionato qui, ma per farlo funzionare, ho dovuto fornire entrambi questi valori nel web.config:

In system.web

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

E dentro system.webServer

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

IMPORTANTE : entrambi questi valori devono corrispondere. In questo caso, il mio caricamento massimo è di 1024 megabyte.

maxRequestLength ha 1048576 KILOBYTES e maxAllowedContentLength ha 1073741824 BYTES .

So che è ovvio, ma è facile da trascurare.


5
Per qualsiasi cosa possa interessare: questa risposta funziona perfettamente anche con IIS-Express (pagine Web asp.net con WebMatrix)
VoidKing

5
Sì, questa è la risposta che ha funzionato per me invece della risposta di Sachin. Funziona anche su Azure.
Gautam Jain,

5
Questa è sicuramente la risposta corretta ... entrambe le voci devono essere presenti. Nel caso di MVC 3, può trovarsi nel web.configfile root del progetto .
Miguel Angelo,

2
un'altra cosa importante è l '"esecuzioneTimeout" che Karl menziona
Muhammad Amin,

26
Ho dovuto combinare questo con una linea esistente per: <httpRuntime targetFramework = "4.5" maxRequestLength = "1048576" executionTimeout = "3600" />
Ken Mc

195

Vale la pena notare che potresti voler limitare questa modifica all'URL che prevedi venga utilizzato per il caricamento piuttosto che per l'intero sito.

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

Bella soluzione pensando alla posizione. Ma esiste un percorso di localizzazione quando si lavora con MVC (e quindi si lavora con route)?
Luuk Krijnen,

1
Sarebbe un URL corrispondente al percorso su cui hai impostato l'azione di caricamento. Nel mio caso, ho un controller di documenti con un'azione chiamata Upload a cui invio il modulo. Nel tuo caso sarebbe qualunque sia l'URL della tua azione.
Nick Albrecht,

Per tutti coloro a cui piace questa risposta, vedere questo .
DontVoteMeDown

2
Amico, rock. Mi dispiace, ma il mio piccolo voto non è bastato.
Nicholas Petersen,

1
Funzionerà con WebAPI fino a MVC v5 incluso. Dopo aver colpito ASP.NET Core con MVC Core, ci sono diverse opzioni che dovresti impostare per Kestrel.
Nick Albrecht,

44

E nel caso in cui qualcuno stia cercando un modo per gestire questa eccezione e mostrare una spiegazione significativa all'utente (qualcosa come "Stai caricando un file troppo 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 o successivo richiesto)


1
maxAllowedContentLength dovrebbe essere maggiore di (maxRequestLength * 1024) per la generazione dell'eccezione.
Der_Meister

Questo post mi ha fornito ciò di cui avevo bisogno per avvisare l'utente, ma HttpContext.Current.ClearError()era necessario per consentire il Response.Redirect()corretto funzionamento. In termini di web.configfunziona solo con l' maxRequestLengthattributo di httpRuntime.
dal

La convalida della dimensione del file e il messaggio intuitivo possono essere eseguiti tramite JS a livello di pagina utilizzando un onchangeevento sul pulsante di caricamento e confrontando la dimensione del file di caricamento con il limite massimo di caricamento.
Alfred Wallace,

29

La dimensione massima della richiesta è, per impostazione predefinita, 4MB (4096 KB)

Questo è spiegato qui .

L'articolo precedente spiega anche come risolvere questo problema :)


4
Il link mi sta reindirizzando alla home page del supporto tecnico Microsoft
Bishop

1
Forse qualcosa non andava. Il link reindirizza qui
gofr1

22

Se non è possibile aggiornare i file di configurazione ma controllare il codice che gestisce i caricamenti dei file, utilizzare HttpContext.Current.Request.GetBufferlessInputStream(true).

Il truevalore per disableMaxRequestLengthparametro indica al framework di ignorare i limiti di richiesta configurati.

Per una descrizione dettagliata visitare https://msdn.microsoft.com/en-us/library/hh195568(v=vs.110).aspx


FANTASTICO, quindi in che modo la risposta migliore ha> 1600 voti e solo 5? Questo è fantastico, perché così spesso, è solo una singola azione su cui lo vogliamo. Inoltre, non si scherza con altre impostazioni, ecc.
Nicholas Petersen,

Questo è quello che stavo cercando.
Chris Catignani,

20

C'è un elemento in web.config per configurare la dimensione massima del file caricato:

<httpRuntime 
    maxRequestLength="1048576"
  />

11

Per riassumere tutte le risposte in un unico posto:

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

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

Regole:

  • Il valore maxRequestLength (espresso in kb) deve corrispondere a maxAllowedContentLength (espresso in byte).
  • la maggior parte delle volte la sezione system.web potrebbe già contenere un "httpRuntime". imposta targetFramework sulla versione del tuo .net utilizzato.

Appunti:

  • il valore predefinito per maxRequestLength è 4096 (4mb). il valore massimo è 2.147.483.647
  • il valore predefinito per maxAllowedContentLength è 30.000.000 (circa 30mb). il valore massimo è 4.294.967.295

maggiori informazioni MSDN


8

maxRequestLength (lunghezza in KB) Qui come ex. Ho preso 1024 (1 MB) maxAllowedContentLength (lunghezza in byte) dovrebbe essere uguale a maxRequestLength (1048576 byte = 1 MB).

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

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

6

Mi ha infastidito anche per giorni. Ho modificato il file Web.config ma non ha funzionato. Si è scoperto che ci sono due file Web.config nel mio progetto e che avrei dovuto modificare quello nella directory ROOT , non gli altri. Spero che questo possa essere utile.


5

Se hai una richiesta che va a un'applicazione nel sito, assicurati di impostare maxRequestLength nel root web.config. La maxRequestLength nel web.config dell'applicazione sembra essere ignorata.


Se potessi votare questo più di una volta, lo farei. Questo ha sprecato un giorno della mia vita. Se si dispone di un'applicazione secondaria di directory virtuale, è necessario inserire httpRuntime maxRequestLength="###e requestLimits maxAllowedContentLengthin una configurazione Web a livello di radice, non a livello di app secondaria.
Nickvans

1

Sono stato inciampato dal fatto che il nostro file web.config ha più sezioni system.web: ha funzionato quando ho aggiunto <httpRuntime maxRequestLength = "1048576" /> alla sezione system.web che a livello di configurazione.


1

Ho dovuto modificare il C:\Windows\System32\inetsrv\config\applicationHost.configfile e aggiungere <requestLimits maxAllowedContentLength="1073741824" />alla fine del ...

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

sezione.

Come da questo articolo di supporto Microsoft


web.config del tuo progetto dovrebbe sovrascriverli, quindi non vedo la necessità di modificare applicationHost.config.
bvgheluwe,

-3

Posso aggiungere alla configurazione web non compilata

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

1
L' executionTimeoutattributo non ha nulla a che fare con ciò che viene richiesto e nemmeno il compilationtag.
Mathias Lykkegaard Lorenzen,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.