Dépassement de la longueur maximale de la demande.

1050

J'obtiens l'erreur Longueur maximale de la demande dépassée lorsque j'essaie de télécharger une vidéo sur mon site.

Comment puis-je réparer ça?

Surya sasidhar
la source

Réponses:

1973

Si vous utilisez IIS pour héberger votre application, la taille de fichier de téléchargement par défaut est de 4 Mo. Pour l'augmenter, veuillez utiliser cette section ci-dessous dans votre web.config-

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

Pour IIS7 et supérieur, vous devez également ajouter les lignes ci-dessous:

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

Remarque :

  • maxRequestLengthest mesuré en kilo-octets
  • maxAllowedContentLengthest mesuré en octets

c'est pourquoi les valeurs diffèrent dans cet exemple de configuration. (Les deux équivalent à 1 Go.)

Sachin Shanbhag
la source
7
Merci sachin et j'ai ajouté quelque chose comme <httpRuntime maxRequestLength = "32768" executionTimeout = "180" />
Surya sasidhar
11
maxAllowedContentLength doit être en octets, pas en kilo-octets, les exemples fournis ne sont donc pas équivalents.
Matthew Sharpe
33
Avec IIS 7.5 et VS RC 2012 IIS Express, j'ai dû définir les DEUX. HttpRuntime configure la longueur maximale d'ASP.NET tandis que requestLimits configure la longueur maximale d'IIS, stackoverflow.com/questions/6327452/… et forums.iis.net/t/1169846.aspx
Despertar
18
Il convient de souligner, encore une fois, que la valeur maxAllowedContentLength est en octets, pas en kilo-octets. Les deux valeurs ne doivent pas être le même nombre, car elles ne sont pas la même unité de mesure.
Pandincus
13
Assurez-vous que vous ajoutez ce paramètre au principal Web.configau lieu de celui à l'intérieur du Viewsdossier
Serj Sagan
553

Je ne pense pas que cela ait été mentionné ici, mais pour que cela fonctionne, j'ai dû fournir ces deux valeurs dans le web.config:

Dans system.web

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

Et en system.webServer

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

IMPORTANT : ces deux valeurs doivent correspondre. Dans ce cas, mon téléchargement maximum est de 1024 mégaoctets.

maxRequestLength a 1048576 KILOBYTES , et maxAllowedContentLength a 1073741824 BYTES .

Je sais que c'est évident, mais c'est facile à ignorer.

Karl
la source
5
Pour tout cela peut concerner: Cette réponse fonctionne également parfaitement pour IIS-Express (asp.net-pages Web avec WebMatrix)
VoidKing
5
Oui, c'est la réponse qui a fonctionné pour moi au lieu de la réponse de Sachin. Cela fonctionne également sur Azure.
Gautam Jain
5
C'est certainement la bonne réponse ... les deux entrées doivent être présentes. Dans le cas de MVC 3, il peut être dans le web.configfichier racine du projet .
Miguel Angelo
2
une autre chose importante est le «executionTimeout» dont Karl parle
Muhammad Amin
26
J'ai dû combiner cela avec une ligne existante pour: <httpRuntime targetFramework = "4.5" maxRequestLength = "1048576" executionTimeout = "3600" />
Ken Mc
195

Il convient de noter que vous souhaiterez peut-être limiter cette modification à l'URL que vous prévoyez d'utiliser pour le téléchargement plutôt qu'à l'ensemble de votre 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
la source
Belle solution en pensant à l'emplacement. Mais existe-t-il un chemin de localisation lorsque vous travaillez avec MVC (et donc avec des routes)?
Luuk Krijnen
1
Ce serait une URL correspondant à l'itinéraire sur lequel votre action de téléchargement est définie. Dans mon cas, j'ai un contrôleur de documents avec une action appelée Télécharger sur laquelle je poste le formulaire. Dans votre cas, ce serait l'URL de votre action.
Nick Albrecht
Pour tous ceux qui aiment cette réponse, voyez ceci .
DontVoteMeDown
2
Mec vous rock. Désolé, mais mon tout petit vote positif n'était pas suffisant.
Nicholas Petersen
1
Cela fonctionnera avec WebAPI jusqu'à MVC v5 inclus. Une fois que vous appuyez sur ASP.NET Core avec MVC Core, vous devez définir différentes options pour Kestrel.
Nick Albrecht
44

Et juste au cas où quelqu'un chercherait un moyen de gérer cette exception et de montrer une explication significative à l'utilisateur (quelque chose comme "Vous téléchargez un fichier trop gros"):

//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 version ultérieure requis)

Serge Shultz
la source
1
maxAllowedContentLength doit être supérieur à (maxRequestLength * 1024) pour la génération d'exception.
Der_Meister
Ce message m'a donné ce dont j'avais besoin pour avertir l'utilisateur, mais qui HttpContext.Current.ClearError()était nécessaire pour permettre Response.Redirect()au bon fonctionnement. En termes de web.configcela fonctionne uniquement avec l' maxRequestLengthattribut de httpRuntime.
nrod
La validation de la taille du fichier et le message convivial peuvent être effectués via JS au niveau de la page en utilisant un onchangeévénement sur le bouton de téléchargement et en comparant la taille du fichier de téléchargement avec la limite de téléchargement maximale.
Alfred Wallace
29

La taille de demande maximale est, par défaut, 4MB (4096 KB)

Ceci est expliqué ici .

L'article ci-dessus explique également comment résoudre ce problème :)

Dave
la source
4
Le lien me redirige vers la page d'accueil du support de Microsoft
Bishop
1
Peut-être que quelque chose n'allait pas. Le lien redirige ici
gofr1
22

Si vous ne pouvez pas mettre à jour les fichiers de configuration mais contrôler le code qui gère les téléchargements de fichiers, utilisez HttpContext.Current.Request.GetBufferlessInputStream(true).

La truevaleur du disableMaxRequestLengthparamètre indique au framework d'ignorer les limites de demande configurées.

Pour une description détaillée, visitez https://msdn.microsoft.com/en-us/library/hh195568(v=vs.110).aspx

Sergey Tarasov
la source
IMPRESSIONNANT, alors comment la meilleure réponse a-t-elle> 1600 votes, et ce seulement 5? C'est formidable, car si souvent, ce n'est qu'une seule action que nous voulons. De plus, pas de problème avec d'autres paramètres, etc.
Nicholas Petersen
C'est ce que je cherchais.
Chris Catignani
20

Il y a un élément dans web.config pour configurer la taille maximale du fichier téléchargé:

<httpRuntime 
    maxRequestLength="1048576"
  />
ema
la source
11

Pour résumer toutes les réponses en un seul endroit:

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

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

Règles:

  • La valeur maxRequestLength (exprimée en ko) doit correspondre à maxAllowedContentLength (exprimée en octets).
  • la plupart du temps, votre section system.web peut déjà contenir un "httpRuntime". définissez votre targetFramework sur la version de votre .net utilisée.

Remarques:

  • la valeur par défaut de maxRequestLength est 4096 (4 Mo). la valeur maximale est de 2147483647
  • la valeur par défaut de maxAllowedContentLength est de 30 000 000 (environ 30 Mo). la valeur maximale est de 4 294 967 295

plus d'informations MSDN

BernieSF
la source
8

maxRequestLength (longueur en Ko) Ici comme ex. J'ai pris 1024 (1 Mo) maxAllowedContentLength (longueur en octets) devrait être identique à votre maxRequestLength (1048576 octets = 1 Mo).

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

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

Cela m'a aussi dérangé pendant des jours. J'ai modifié le fichier Web.config mais cela n'a pas fonctionné. Il s'est avéré qu'il y avait deux fichiers Web.config dans mon projet, et je devrais modifier l'un dans le répertoire ROOT , pas les autres. J'espère que ce serait utile.

NiaoBlush
la source
5

Si vous avez une demande adressée à une application du site, assurez-vous de définir maxRequestLength dans le web.config racine. Le maxRequestLength dans le web.config des applications semble être ignoré.

mhenry1384
la source
Si je pouvais voter plus d'une fois, je le ferais. Cela a gâché une journée de ma vie. Si vous avez une sous-application dir virtuelle, vous devez placer le httpRuntime maxRequestLength="###et requestLimits maxAllowedContentLengthdans une configuration Web au niveau racine, pas au niveau sous-application.
nickvans
1

J'ai été trébuché par le fait que notre fichier web.config comporte plusieurs sections system.web: cela a fonctionné lorsque j'ai ajouté <httpRuntime maxRequestLength = "1048576" /> à la section system.web au niveau de la configuration.

Graham Laight
la source
1

J'ai dû éditer le C:\Windows\System32\inetsrv\config\applicationHost.configfichier et l'ajouter <requestLimits maxAllowedContentLength="1073741824" />à la fin du ...

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

section.

Selon cet article de support Microsoft

HyperActive
la source
web.config de votre propre projet devrait les remplacer, donc je ne vois pas la nécessité de modifier applicationHost.config .
bvgheluwe
-3

Je peux ajouter à la configuration Web non compilé

<system.web> 
  <httpRuntime maxRequestLength="1024" executionTimeout="3600" /> 
  <compilation debug="true"/> 
</system.web> 
<security> 
  <requestFiltering> 
    <requestLimits maxAllowedContentLength="1048576"/> 
  </requestFiltering> 
</security>
Cesar Miguel
la source
1
L' executionTimeoutattribut n'a rien à voir avec ce qui est demandé, et la compilationbalise non plus.
Mathias Lykkegaard Lorenzen