Сценарий
У меня есть приложение, где мы взяли старую структуру URL строки запроса:
?x=1&y=2&z=3&a=4&b=5&c=6
и изменил его на структуру пути:
/x/1/y/2/z/3/a/4/b/5/c/6
Мы используем ASP.NET MVC и (естественно) маршрутизацию ASP.NET.
Проблема
Проблема заключается в том, что наши параметры являются динамическими, и (теоретически) нет ограничений на количество параметров, которые нам необходимо учитывать.
Это нормально, пока мы не попали в следующий поезд:
Ошибка HTTP 400.0 - неверный запрос ASP.NET обнаружил недопустимые символы в URL.
IIS выбрасывает эту ошибку, когда наш URL-адрес прошел определенную длину.
Nitty Gritty
Вот что мы выяснили:
Это не проблема IIS
IIS имеет максимальный предел длины пути, но указанная выше ошибка не такова.
Изучите dot iis dot net Как использовать фильтрацию запросов Раздел "Фильтр на основе ограничений по запросу"
Если путь был слишком длинным для IIS, он бы выбрал 404.14, а не 400.0.
Кроме того, длина пути (и запроса) IIS настраивается:
<requestLimits
maxAllowedContentLength="30000000"
maxUrl="260"
maxQueryString="25"
/>
Это проблема ASP.NET
После того, как выкалывают:
Форумы IIS Тема: максимальная длина URL-адреса ASP.NET 2.0? http://forums.iis.net/t/1105360.aspx
выясняется, что это проблема ASP.NET(ну, на самом деле .NET).
В основе дела лежит то, что, насколько я могу судить, ASP.NET не может обрабатывать пути длиной более 260 символов.
Гвоздь в гробу в том, что это подтверждается самим Филом Хааком:
Переполнение стека Предел MAX_PATH URL-адреса ASP.NET ID вопроса 265251
Вопрос
Итак, что вопрос?
Вопрос в том, насколько велика это ограничение?
Для моего приложения это убийца сделки. Для большинства приложений это, вероятно, не проблема.
Как насчет раскрытия? Нет, где упоминается ASP.NET Routing, я когда-либо слышал об этом ограничении. Тот факт, что ASP.NET MVC использует маршрутизацию ASP.NET, делает это еще больше.
Как вы думаете?