2008-11-05 5 views
10

J'ai trouvé un problème avec ASP.NET qui, je le sais au moins, a bloqué une autre personne. Nous essayions d'utiliser un HttpModule pour gérer les requêtes génériques à une application Web. L'URL générée est dynamique et peut contenir plusieurs centaines de caractères. Malheureusement il semble être une limitation dans le fichier aspnet_isapi.dll qui limite la longueur du chemin dans l'URL à MAX_PATH qui est codé en dur à 260 caractères.URL de l'ASP.NET limite MAX_PATH

Est-ce que quelqu'un d'autre a rencontré cela et a trouvé un moyen de contourner cette limite? Les paramètres de chaîne de requête ne sont pas une option.

Merci, Greg Ballard

+0

Le module est en train de modifier l'URL et en augmentant sa longueur? – Will

Répondre

3

Le problème est en fait sous Windows, pas ASP.NET. Windows a défini MAX_PATH à 260 et quand IIS prend une demande pour un nom de fichier plus long, il échouera. Vous avez probablement déjà trouvé cet article KBase, mais pour quelqu'un d'autre: http://support.microsoft.com/kb/q177665/. La section S'applique à: indique que ce comportement est attendu depuis NT 3.51 jusqu'à Vista et Server 2003.

Comme pour une solution de contournement, j'avais une situation similaire, mais nous abandonnions nos tentatives pour éviter un paramètre de chaîne de requête et l'a fait quand même.

2

Merci pour votre réponse. Bien que je n'ai pas trouvé cet article exact, j'avais trouvé similaire. Cependant, ceci n'est pas une limitation dans IIS. Vous pouvez passer un chemin plus long dans la demande à IIS et il retournera la bonne réponse. Vous pouvez vérifier en essayant avec une simple page html. Le problème se produit uniquement lors de l'utilisation de aspnet_isapi.dll pour gérer les demandes. Même le serveur de débogage intégré dans Visual Studio peut gérer des chemins plus longs que 260.

8

Il s'agit d'un problème connu avec aspnet_isapi.dll et il n'existe actuellement aucune solution de contournement. La raison pour laquelle vous ne voyez pas ce problème lors de l'exécution de votre site dans le serveur Web Visual Studio intégré (alias Cassini) est que tout le code est géré et ne repose pas sur aspnet_isapi.dll.

Cela sera traité dans une future version d'ASP.NET.

+5

(+1) 4 ans plus tard, et toujours pas de solution. – capdragon

+0

Toujours pas fixé à partir de décembre 2012. –

0

Vous pouvez utiliser un ISAPI de réécriture d'URL tel que IIRF pour réécrire l'URL en quelque chose que aspnet_isapi peut traiter.

2

@Haacked:

Phil, vous dites que cela est un problème avec aspnet_isapi.dll. Cela ne signifie-t-il pas que ce problème ne devrait pas exister dans le mode pipeline intégré IIS7? De ce que j'ai entendu, cependant, (http://forums.iis.net/t/1105360.aspx) il fait toujours.

Je suis confronté au même problème et je me sens un peu encerclé. Il semble que le routage ASP.NET est affecté. Ainsi, toute application ASP.NET MVC doit avoir des URL plus courtes que 260, après quoi elle doit revenir à Querystrings, ce qui semble être un total de 180!

(Désolé pour rep réponse-commentant ... ne suffit pas de commentaire encore :()

7

je me suis retrouvé à l'aide de ce qui suit dans le web.config pour résoudre ce problème en utilisant Framework MVC2 et .Net 4.0

<httpRuntime maxUrlLength="1000" relaxedUrlToFileSystemMapping="true" /> 
+0

Merci! J'adore les corrections simples – Levitikon

+2

Cela n'a pas fonctionné pour moi. –

2

Le registre UrlSegmentMaxLength clé peut être utilisée pour augmenter le maximum par défaut de Windows de 260 caractères par segment d'URL dans les requêtes HTTP entrantes:

  • clé: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\HTTP\Parameters
  • Valeur: UrlSegmentMaxLength
  • Type: REG_DWORD
  • Données: (La longueur maximale autorisée de votre nouveau segment d'URL, par exemple 4096)

La valeur maximale autorisée est 32766. Si une valeur plus grande est spécifiée, elle sera ignorée. (Crédit: Juan Mendes)

En savoir plus sur les paramètres http.sys: http://support.microsoft.com/kb/820129

Redémarrez l'ordinateur est nécessaire pour apporter une modification à ce paramètre prennent effet. (Crédit: David Rettenbacher, Juan Mendes)

source originale pour cette réponse: https://stackoverflow.com/a/7817739/12484