Ho una pagina aspx in cui sto consentendo a un utente di caricare un file e voglio limitare la dimensione massima del caricamento del file a 10 MB. IIS7, .NET 3.5. Ho il seguente configurato nel mio file web.config:Dove posso rilevare e gestire maxAllowedContentLength superato in 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>
Ho un errore personalizzato modulo che implementa IHttpModule
manipolazione. Ho scoperto che quando viene superato maxRequestLength
, viene effettivamente generato lo HttpApplication.Error
. Tuttavia, quando gioco con maxAllowedContentLength
, l'evento HttpApplication.Error
non viene generato e l'utente viene reindirizzato a una pagina 404.13. Ho allegato con Visual Studio con le eccezioni di prima volta attivate, non viene generato nulla.
Il mio primo pensiero è di controllare la lunghezza del contenuto dell'intestazione in un evento precedente - ci sono raccomandazioni/buone pratiche su dove lo faccio? PostLogRequest? EndRequest?
La risposta di sunflowerpower funziona solo se la modalità pipeline gestita è impostata su integrata. Almeno questo è il motivo per cui ho sperimentato – Marvin
Sto notando che questa soluzione non gestisce correttamente l'autenticazione. Quando chiamo Server.Transfer, le routine di verifica dell'autenticazione della pagina di destinazione non riescono perché la proprietà HttpContext.Current.User è NULL. Non sembra essere causato dalla cancellazione delle intestazioni, in quanto l'eliminazione di tale linea comporta ancora il problema. C'è un modo per aggirare questo? Altrimenti non è una soluzione. – Triynko
Inserisco il codice di errore di @Triynko nel gestore di eventi. Sto usando Umbraco: non sono sicuro se ciò sia significativo, ma questo è l'unico posto in cui sono stato in grado di intercettare le eccezioni di "Lunghezza massima richiesta superata". Dovevo anche chiamare "Response.ClearContent();" rimuovere il YSOD. 'Application_Error' non si attiva per questa eccezione (anche se lo fa per RequestValidation) e non ho potuto ottenere 'OnError' per attivare un UserControl o una Masterpage. Impossibile trovare una pagina effettiva. ;) –