Я пишу функцию загрузки, и у меня проблемы с обнаружением «System.Web.HttpException: максимальная длина запроса превышена» с файлами, размер которых превышает указанный максимальный размер httpRuntime
в web.config (максимальный размер установлен на 5120). Я использую простой <input>
для файла.
Проблема в том, что исключение генерируется перед событием нажатия кнопки загрузки, а исключение происходит до запуска моего кода. Итак, как мне поймать и обработать исключение?
РЕДАКТИРОВАТЬ: исключение создается мгновенно, поэтому я почти уверен, что это не проблема тайм-аута из-за медленного соединения.
c#
asp.net
httpexception
Маркус Л
источник
источник
<input type="file" id="upload" name="upload" onchange="showFileSize();" />
InsideshowFileSize()
вы можете отобразить сообщение об ошибке в зависимости от размера вашего файла с помощьюvar input = document.getElementById("upload"); var file = input.files[0];
тега html и добавить его.Ответы:
К сожалению, нет простого способа отловить такое исключение. Что я делаю, так это либо переопределяю метод OnError на уровне страницы, либо Application_Error в global.asax, затем проверяю, был ли сбой Max Request, и, если да, перехожу на страницу с ошибкой.
Это взлом, но приведенный ниже код мне подходит
источник
httpException.WebEventCode == WebEventCodes.RuntimeErrorPostTooLarge
- используя System.Web.Management.WebEventCodesКак сказал GateKiller, вам нужно изменить maxRequestLength. Вам также может потребоваться изменить executionTimeout, если скорость загрузки слишком низкая. Обратите внимание, что вы не хотите, чтобы ни одна из этих настроек была слишком большой, иначе вы будете уязвимы для атак DOS.
По умолчанию для executionTimeout 360 секунд или 6 минут.
Вы можете изменить maxRequestLength и executionTimeout с помощью элемента httpRuntime .
РЕДАКТИРОВАТЬ:
Если вы хотите обработать исключение независимо от того, как уже было сказано, вам нужно будет обработать его в Global.asax. Вот ссылка на пример кода .
источник
Вы можете решить эту проблему, увеличив максимальную длину запроса в вашем web.config:
В приведенном выше примере используется ограничение в 100 МБ.
источник
Если вам также нужна проверка на стороне клиента, чтобы у вас не возникало необходимости генерировать исключения, вы можете попытаться реализовать проверку размера файла на стороне клиента.
Примечание. Это работает только в браузерах, поддерживающих HTML5. http://www.html5rocks.com/en/tutorials/file/dndfiles/
источник
Привет, решение, упомянутое Дэмиеном МакГиверном, работает только на IIS6,
Он не работает на IIS7 и сервере разработки ASP.NET. Я получаю страницу с сообщением «404 - файл или каталог не найден».
Любые идеи?
РЕДАКТИРОВАТЬ:
Понятно ... Это решение по-прежнему не работает на сервере разработки ASP.NET, но я понял причину, по которой в моем случае оно не работало на IIS7.
Причина в том, что IIS7 имеет встроенное сканирование запросов, которое накладывает ограничение на загружаемый файл, которое по умолчанию составляет 30000000 байт (что немного меньше 30 МБ).
И я пытался загрузить файл размером 100 МБ, чтобы протестировать решение, упомянутое Дэмиеном МакГиверном (с maxRequestLength = "10240", то есть 10 МБ в web.config). Теперь, если я загружу файл размером> 10 МБ и <30 МБ, тогда страница будет перенаправлена на указанную страницу ошибки. Но если размер файла> 30 МБ, то отображается уродливая встроенная страница ошибки с отображением «404 - файл или каталог не найден».
Итак, чтобы этого избежать, вам нужно увеличить макс. допустимая длина содержимого запроса для вашего веб-сайта в IIS7. Это можно сделать с помощью следующей команды,
Я установил макс. длина содержимого до 200 МБ.
После выполнения этой настройки страница успешно перенаправляется на мою страницу с ошибкой, когда я пытаюсь загрузить файл размером 100 МБ.
См. Http://weblogs.asp.net/jgalloway/archive/2008/01/08/large-file-uploads-in-asp-net.aspx для получения дополнительных сведений.
источник
Вот альтернативный способ, который не требует «взломов», но требует ASP.NET 4.0 или более поздней версии:
источник
Один из способов сделать это - установить максимальный размер в web.config, как уже было сказано выше, например
затем, когда вы обрабатываете событие загрузки, проверьте размер, и если он превышает определенную сумму, вы можете поймать его, например
источник
Решение, работающее с IIS7 и более поздними версиями: отображение настраиваемой страницы ошибок, когда загрузка файла превышает допустимый размер в ASP.NET MVC.
источник
В IIS 7 и выше:
файл web.config:
Затем вы можете проверить код позади, например:
Просто убедитесь, что [Размер в байтах] в web.config больше, чем размер файла, который вы хотите загрузить, тогда вы не получите ошибку 404. Затем вы можете проверить размер файла в коде позади, используя ContentLength, что было бы намного лучше
источник
Как вы, наверное, знаете, максимальная длина запроса настраивается в ДВУХ местах.
maxRequestLength
- контролируется на уровне приложения ASP.NETmaxAllowedContentLength
- под<system.webServer>
, контролируется на уровне IISК первому случаю относятся и другие ответы на этот вопрос.
Чтобы поймать ВТОРОЙ, вам нужно сделать это в global.asax:
источник
После тега
добавить следующий тег
вы можете добавить URL-адрес на страницу с ошибкой ...
источник
Вы можете решить эту проблему, увеличив максимальную длину запроса и время выполнения в вашем web.config:
-Уточните, пожалуйста, максимальное время выполнения теркой, затем 1200
источник
Как насчет того, чтобы поймать это на событии EndRequest?
источник
Это можно проверить через:
источник