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?
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?
Réponses:
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 :
maxRequestLength
est mesuré en kilo-octetsmaxAllowedContentLength
est mesuré en octets c'est pourquoi les valeurs diffèrent dans cet exemple de configuration. (Les deux équivalent à 1 Go.)
Web.config
au lieu de celui à l'intérieur du Views
dossier
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.
web.config
fichier racine du projet .
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>
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)
HttpContext.Current.ClearError()
était nécessaire pour permettre Response.Redirect()
au bon fonctionnement. En termes de web.config
cela fonctionne uniquement avec l' maxRequestLength
attribut de httpRuntime
.
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.
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 true
valeur du disableMaxRequestLength
paramè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
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'informations MSDN
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>
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é.
httpRuntime maxRequestLength="###
et requestLimits maxAllowedContentLength
dans une configuration Web au niveau racine, pas au niveau sous-application.
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.
J'ai dû éditer le C:\Windows\System32\inetsrv\config\applicationHost.config
fichier et l'ajouter <requestLimits maxAllowedContentLength="1073741824" />
à la fin du ...
<configuration>
<system.webServer>
<security>
<requestFiltering>
section.
applicationHost.config
.
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>
executionTimeout
attribut n'a rien à voir avec ce qui est demandé, et la compilation
balise non plus.