Je reçois le message d'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?
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 la section ci-dessous dans votre web.config -
<configuration>
<system.web>
<httpRuntime maxRequestLength="1048576" />
</system.web>
</configuration>
Pour IIS7 et les versions ultérieures, vous devez également ajouter les lignes ci-dessous:
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="1073741824" />
</requestFiltering>
</security>
</system.webServer>
Note:
maxRequestLength
est mesurée en kilo-octetsmaxAllowedContentLength
est mesuré en octetsc'est pourquoi les valeurs diffèrent dans cet exemple de configuration. (Les deux équivalent à 1 Go)
Je ne pense pas que cela ait été mentionné ici, mais pour que cela fonctionne, je devais fournir ces deux valeurs dans le fichier web.config:
Dans system.web
<httpRuntime maxRequestLength="1048576" executionTimeout="3600" />
Et dans system.webServer
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="1073741824" />
</requestFiltering>
</security>
IMPORTANT: Ces deux valeurs doivent correspondre. Dans ce cas, mon envoi maximal est de 1024 mégaoctets.
maxRequestLength a 1048576 KILOBYTES et maxAllowedContentLength a 1073741824 BYTES .
Je sais que c'est évident, mais c'est facile à négliger.
Il peut être intéressant de noter que vous voudrez peut-être limiter cette modification à l'URL que vous comptez 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>
Et juste au cas où quelqu'un chercherait un moyen de gérer cette exception et d'afficher une explication significative à l'utilisateur (quelque chose comme "Vous téléchargez un fichier trop volumineux"):
//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(httpException.WebEventCode == WebEventCodes.RuntimeErrorPostTooLarge)
{
//handle the error
Response.Write("Too big a file, dude"); //for example
}
}
(ASP.NET 4 ou version ultérieure requis)
La taille maximale de la demande est de 4 Mo (4096 Ko) par défaut.
Ceci est expliqué ici: http://support.Microsoft.com/default.aspx?scid=kb;EN-US;295626
L'article ci-dessus explique également comment résoudre ce problème :)
Il y a un élément dans web.config pour configurer la taille maximale du fichier téléchargé:
<httpRuntime
maxRequestLength="1048576"
/>
Si vous ne pouvez pas mettre à jour les fichiers de configuration mais contrôlez le code qui gère les téléchargements de fichiers, utilisez HttpContext.Current.Request.GetBufferlessInputStream(true)
.
Le paramètre true
de disableMaxRequestLength
indique au framework d'ignorer les limites de demandes configurées.
Pour une description détaillée, visitez le site https://msdn.Microsoft.com/en-us/library/hh195568 (v = vs.110) .aspx
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>
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:
Remarques:
plus d'infos MSDN
Cela m'a dérangé pendant des jours aussi. J'ai modifié le fichier Web.config mais cela n'a pas fonctionné. Il s'est avéré qu'il y a deux fichiers Web.config dans mon projet, et je devrais modifier celui du répertoire ROOT, pas les autres. J'espère que cela serait utile.
Si une demande est envoyée à une application du site, assurez-vous de définir maxRequestLength dans le fichier racine web.config. La valeur maxRequestLength dans le fichier web.config de l'application semble être ignorée.
Le fait que notre fichier web.config comporte plusieurs sections system.web m'a fait trébucher: cela a fonctionné lorsque j'ai ajouté <httpRuntime maxRequestLength = "1048576" /> à la section system.web au niveau de la configuration.
Je devais éditer le fichier C:\Windows\System32\inetsrv\config\applicationHost.config
et ajouter <requestLimits maxAllowedContentLength="1073741824" />
à la fin de la ...
<configuration>
<system.webServer>
<security>
<requestFiltering>
section.