ASP.NET URL MAX_PATH предел - PullRequest
10 голосов
/ 05 ноября 2008

Я обнаружил проблему с ASP.NET, которая, как я знаю, по крайней мере поставила в тупик еще одного человека. Мы пытались использовать HttpModule для обработки подстановочных знаков запросы к веб-приложению. Сгенерированный URL является динамическим и может потенциально может быть длиной в несколько сотен символов. К сожалению там представляется, что ограничение в файле aspnet_isapi.dll ограничивает длина пути в URL к MAX_PATH, который жестко закодирован в 260 символов

Кто-нибудь еще сталкивался с этим и нашел способ обойти это ограничение? Параметры строки запроса не являются опцией.

Спасибо, Грег Баллард

Ответы [ 7 ]

8 голосов
/ 07 апреля 2011

В итоге я решил использовать эту проблему в файле web.config для решения этой проблемы с помощью Mvc2 и .Net Framework 4.0

.
<httpRuntime maxUrlLength="1000" relaxedUrlToFileSystemMapping="true" />
8 голосов
/ 05 ноября 2008

Это известная проблема с aspnet_isapi.dll, и в настоящее время нет обходного пути. Причина, по которой вы не видите эту проблему при запуске вашего сайта во встроенном веб-сервере Visual Studio (он же Кассини), заключается в том, что он полностью управляемый код и не использует aspnet_isapi.dll.

Это будет исправлено в следующей версии ASP.NET.

3 голосов
/ 05 ноября 2008

Проблема на самом деле лежит в Windows, а не в ASP.NET. В Windows установлено значение MAX_PATH, равное 260, и когда IIS принимает запрос на более длинное имя файла, произойдет сбой. Возможно, вы уже нашли эту статью KBase, но для всех остальных: http://support.microsoft.com/kb/q177665/. В разделе «Применимо к:» показано ожидаемое поведение от NT 3.51 вплоть до Vista и Server 2003.

Что касается обходного пути, у меня была похожая ситуация, но мы бы отказались от попыток избежать параметра строки запроса и сделали это в любом случае.

2 голосов
/ 10 февраля 2016

Ключ реестра UrlSegmentMaxLength можно использовать для увеличения значения по умолчанию для Windows максимум 260 символов на сегмент URL во входящих HTTP-запросах:

  • Ключ: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\HTTP\Parameters
  • Значение: UrlSegmentMaxLength
  • Тип: REG_DWORD
  • Данные: (Максимально допустимая длина нового желаемого сегмента URL, например, 4096)

Максимально допустимое значение равно 32766. Если указано большее значение, оно будет игнорироваться. (Предоставлено: Хуан Мендес)

Подробнее о настройках http.sys: http://support.microsoft.com/kb/820129

Требуется перезагрузка компьютера, чтобы изменение этого параметра вступило в силу. (Фото: Дэвид Реттенбахер, Хуан Мендес)

Первоначальный источник этого ответа: https://stackoverflow.com/a/7817739/12484

2 голосов
/ 26 июля 2009

@ Haacked:

Фил, вы упоминаете, что это проблема с aspnet_isapi.dll. Не означает ли это, что эта проблема не должна существовать в режиме интегрированного конвейера IIS7?

Из того, что я слышал, однако, (http://forums.iis.net/t/1105360.aspx) он все еще делает.

Я сталкиваюсь с той же проблемой, и чувствую себя немного удрученной. Похоже, что ASP.NET маршрутизации затрагивается. Таким образом, любое приложение ASP.NET MVC должно иметь URL-адреса короче 260, после чего оно должно возвращаться к строкам запроса, что выглядит как целые 180!

(Извините за комментирование ответов ... недостаточно комментариев для комментария :()

2 голосов
/ 05 ноября 2008

Спасибо за ваш ответ. Хотя я не нашел точную статью, я нашел подобное. Тем не менее, это не ограничение в IIS. Вы можете передать более длинный путь в запросе IIS, и он вернет правильный ответ. Вы можете проверить, попробовав простую HTML-страницу. Проблема возникает только при использовании aspnet_isapi.dll для обработки запросов. Даже встроенный сервер отладки в Visual Studio может обрабатывать более длинные пути, чем 260.

0 голосов
/ 18 ноября 2008

Вы можете использовать перезаписывающий URL ISAPI, такой как IIRF , чтобы переписать URL во что-то, что aspnet_isapi может обработать.

...