Le scénario
J'ai une application où nous avons utilisé la bonne vieille structure URL à chaîne de requête :
?x=1&y=2&z=3&a=4&b=5&c=6
et l'a transformé en une structure de chemin :
/x/1/y/2/z/3/a/4/b/5/c/6
Nous utilisons ASP.NET MVC et (naturellement) ASP.NET routing.
Le problème
Le problème est que nos paramètres sont dynamiques et qu'il n'y a (théoriquement) aucune limite au nombre de paramètres à prendre en compte.
Tout va bien jusqu'à ce que nous soyons percutés par le train suivant :
Erreur HTTP 400.0 - Mauvaise requête ASP.NET a détecté des caractères invalides dans l'URL.
IIS lançait cette erreur quand l'URL dépassait une certaine longueur.
L'essentiel
Voici ce que nous avons découvert :
Ce n'est pas un problème IIS
IIS a bien une limite de longueur maximale des chemins, mais l'erreur ci-dessus n'en fait pas partie.
Apprendre dot iis dot net Comment utiliser le filtrage des requêtes Section "Filtrer en fonction des limites de demande
Si le chemin était trop long pour IIS, il renverrait un 404.14, et non un 400.0.
En outre, la longueur maximale des chemins (et des requêtes) d'IIS est configurable :
<requestLimits
maxAllowedContentLength="30000000"
maxUrl="260"
maxQueryString="25"
/>
C'est un problème d'ASP.NET
Après avoir fouillé un peu :
Forums IIS Sujet : ASP.NET 2.0 longueur maximale des URL ? http://forums.iis.net/t/1105360.aspx
il s'avère qu'il s'agit d'un problème ASP.NET (enfin, .NET en fait).
Le cœur du problème est que, pour autant que je sache, ASP.NET ne peut pas gérer les chemins d'accès de plus de 260 caractères.
Le clou du cercueil est que cela est confirmé par Phil le Haack lui-même :
Stack Overflow ASP.NET url limite MAX_PATH Question ID 265251
La question
Alors quelle est la question ?
La question est de savoir à quel point cette limitation est importante.
Pour mon application, c'est une fatalité. Pour la plupart des applications, ce n'est probablement pas un problème.
Qu'en est-il de la divulgation ? À aucun endroit où ASP.NET Routing est mentionné, je n'ai entendu parler de cette limitation. Le fait que ASP.NET MVC utilise ASP.NET Routing rend l'impact de cette limitation encore plus grand.
Qu'en pensez-vous ?