У меня есть страница aspx, где я разрешаю пользователю загружать файл, и я хочу ограничить максимальный размер загружаемого файла размером 10 МБ. IIS7, .NET 3.5. У меня есть следующий сконфигурирован в моем файле web.config:Где я могу поймать и обработать maxAllowedContentLength, превышенную в 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>
У меня есть пользовательский модуль, который реализует IHttpModule
обработки ошибок. Я обнаружил, что когда maxRequestLength
превышено, HttpApplication.Error
действительно поднят. Однако, когда я играю с maxAllowedContentLength
, событие HttpApplication.Error
не поднимается, и пользователь перенаправляется на страницу 404.13. Я подключился к Visual Studio с первым шансом, что ничто не забрасывается.
Моя первая мысль - проверить длину содержимого заголовка в более раннем событии - есть ли рекомендации/лучшие практики, где я это делаю? PostLogRequest? EndRequest?
Пожалуйста, не отвечайте на ответ подсолнечной энергии, только если для управляемого режима трубопровода установлено значение Интегрировано. По крайней мере, вот почему я испытал – Marvin
. Я замечаю, что это решение не обрабатывает аутентификацию должным образом. Когда я вызываю Server.Transfer, процедуры проверки подлинности целевой страницы терпят неудачу, потому что свойство HttpContext.Current.User равно NULL. Похоже, что это не вызвано очисткой заголовков, так как принятие этой строки все еще приводит к этой проблеме. Есть ли способ обойти это? В противном случае это не решение. – Triynko
Я установил код ошибки @Triynko в обработчик события. Я использую Umbraco - я не уверен, что это важно, но это единственное место, которое я смог уловить «Превышение максимальной длины запроса». Мне также пришлось вызвать «Response.ClearContent();» для удаления YSOD. «Application_Error» не срабатывает для этого исключения (хотя это делает для RequestValidation), и я не мог получить «OnError» для запуска в UserControl или Masterpage. Не удалось найти фактическую страницу. ;) –