J'ai une page aspx où je permet à un utilisateur de télécharger un fichier et je veux limiter la taille de téléchargement de fichier à 10 Mo. IIS7, .NET 3.5. J'ai configuré ce qui suit dans mon fichier web.config:Où puis-je attraper et gérer maxAllowedContentLength dépassé dans IIS7?
<location path="foo.aspx">
<system.web>
<!-- maxRequestLength: kbytes, executionTimeout:seconds -->
<httpRuntime maxRequestLength="10240" executionTimeout="120" />
<authorization>
<allow roles="customRole"/>
<!-- Deny everyone else -->
<deny users="*"/>
</authorization>
</system.web>
<system.webServer>
<security>
<requestFiltering>
<!-- maxAllowedContentLength: bytes -->
<requestLimits maxAllowedContentLength="10240000"/>
</requestFiltering>
</security>
<handlers accessPolicy="Read, Script">
<add name="foo" path="foo.aspx" verb="POST"
type="System.Web.UI.PageHandlerFactory"
preCondition="integratedMode" />
</handlers>
</system.webServer>
</location>
J'ai un module de gestion des erreurs personnalisée qui implémente IHttpModule
. J'ai constaté que lorsque maxRequestLength
est dépassé, HttpApplication.Error
est en effet élevé. Toutefois, lorsque je joue avec maxAllowedContentLength
, l'événement HttpApplication.Error
n'est pas déclenché et l'utilisateur est redirigé vers une page 404.13. J'ai attaché avec Visual Studio avec des exceptions de première chance activées rien n'est lancé.
Mon premier réflexe est de vérifier la longueur du contenu de l'en-tête lors d'un événement antérieur - y a-t-il des recommandations/bonnes pratiques concernant l'endroit où je fais cela? PostLogRequest? EndRequest?
Veuillez noter que la réponse de sunflowerpower ne fonctionne que si le mode pipeline géré est défini sur Intégré. Au moins c'est pourquoi j'ai expérimenté – Marvin
Je remarque que cette solution ne gère pas correctement l'authentification. Lorsque j'appelle Server.Transfer, les routines de vérification d'authentification de la page cible échouent car la propriété HttpContext.Current.User est NULL. Cela ne semble pas provenir de l'effacement des en-têtes, car la sortie de cette ligne entraîne toujours le problème. Y at-il un moyen de contourner cela? Ce n'est pas une solution autrement. – Triynko
J'ai mis le code d'erreur de @Triynko dans votre gestionnaire d'événements. J'utilise Umbraco - je ne suis pas sûr que ce soit significatif mais c'est le seul endroit où j'ai été capable d'attraper des exceptions 'Maximum request length exceeded' pour le moment. J'ai aussi dû appeler 'Response.ClearContent();' pour enlever le YSOD. 'Application_Error' ne se déclenche pas pour cette exception (bien que ce soit le cas pour RequestValidation) et je n'ai pas pu obtenir 'OnError' pour déclencher un UserControl ou une Masterpage. Impossible de trouver une page réelle. ;) –