ASP.NET 4 URL limitations: pourquoi les URL ne peut pas contenir tous les %3f caractères
http://site.com/page%3fcharacter
Cette URL sera de retour le message d'erreur suivant:
Illegal characters in path.
Je suis déjà en train de mettre cela dans le web.config:
<system.web>
<httpRuntime requestValidationMode="2.0" requestPathInvalidCharacters="" />
<pages validateRequest="false">
...
Comment puis-je corriger cette erreur?
Vous devez vous connecter pour publier un commentaire.
Si vous souhaitez autoriser la demande, vous devez ajouter
requestPathInvalidCharacters
et spécifiez une chaîne vide:Modifier Vous devez laisser votre question initiale en place, parce que maintenant, ma réponse n'a pas de sens.
Mais pour répondre à votre deuxième question, c'est parce qu' %3f correspond '?' qui n'est pas autorisé dans les noms de fichiers sur Windows. Vous pouvez définir la
relaxedUrlToFileSystemMapping
propriététrue
pour changer ce comportement:Vous voudrez peut-être regarder à travers toutes les propriétés dans le HttpRuntimeSection classe pour voir si il y a d'autres personnes qui pourraient s'appliquer.
Vous pouvez également mettre en place une sous-classe de RequestValidator et configurer votre site web.config pour utiliser votre sous-classe (qui va sans doute permettre à tous les Url à travers?). Personnellement, je ne voudrais pas ennuyer et laissez les classes intégrées de la gérer. Il est peu probable qu'un utilisateur normal est à chaque va accidentellement tapez "%3f" dans un chemin, et pourquoi la peine d'aller à tant de mal pour améliorer la cas d'utilisation pour des utilisateurs malveillants?
Cela, d'ailleurs, est en fait une nouvelle fonctionnalité dans ASP.NET 4, qui est pourquoi Débordement de Pile n'est pas de cracher une erreur: c'est en cours d'exécution sur .NET 3.5.
Voici un bel article par, Hanselman en expliquant tous les coins et recoins liée à votre problème:
Des expériences dans des Délires: Permettre à des pourcentages, l'angle de supports et d'autres choses coquines dans la ASP.NET/IIS URL de la Requête
Probablement parce que cela ressemble beaucoup à une url mal formée.
& est utilisé comme séparateur pour les paramètres de chaîne de requête c'est à dire site.com/page?some=20&autre=15