9
votes

Limitations ASP.NET 4 URL: Pourquoi l'URL ne peut contenir aucun caractère% 3f

<system.web>
<httpRuntime requestValidationMode="2.0" requestPathInvalidCharacters="" />
<pages validateRequest="false"> 
...

0 commentaires

3 Réponses :


2
votes

Probablement parce que cela ressemble beaucoup à une URL malformée.

& est utilisé comme séparateur pour les paramètres de la chaîne de requête I.E. Site.com/page?some=20&another=15


1 commentaires

C'est exact. Mais imaginez que quelqu'un postera une URL comme celle-ci sur votre site et que l'utilisateur voie une erreur comme celle-ci ... Ce déroutant!



29
votes

Si vous souhaitez autoriser la demande via, vous devez ajouter demandePathInvalidCaracters et le définir sur une chaîne vide: xxx

edit Vous devriez laisser votre question originale en place, car ma réponse n'a pas de sens.

mais en réponse à votre deuxième question, que c'est parce que% 3f correspond à "?" Ce qui n'est pas autorisé dans les noms de fichiers sous Windows. Vous pouvez définir le RelaxedurLToFileSystemPrapper propriété sur true pour modifier ce comportement: xxx

Vous voudrez peut-être regarder à travers tous les les propriétés du HTTPRUNTEMENTE classe à voir s'il y a d'autres personnes qui pourraient s'appliquer.

Vous pouvez également implémenter une sous-classe de demandevalidator et configurez votre web.config pour utiliser votre sous-classe (qui permettra probablement à toutes les URL à travers?). Personnellement, je ne me dérangerais pas et laissez simplement les classes intégrées le gérer. Il est peu probable qu'un utilisateur normal soit tous les Tapez-vous accidentellement de type "% 3f" dans un chemin, et pourquoi la peine d'aller autant de problèmes pour améliorer le cas d'utilisation des utilisateurs malveillants?

Ceci, d'ailleurs, est en fait une nouvelle fonctionnalité d'ASP.NET 4, c'est pourquoi la pile débordement ne crache pas une erreur: elle fonctionne sur .NET 3.5.


4 commentaires

Qui a résolu le problème. Mais je reçois une autre erreur pour une autre URL. Je vais éditer la question.


1. Réécrivez le chemin. 2. Renvoie une page vierge (ou une page d'erreur personnalisée). 3. Rediriger la page d'accueil. Je veux avoir le pouvoir de décider comment répondre à ce type d'erreur.


Puis-je avoir des tests d'intégration pour cela? Stackoverflow.com/Questtions/2831075/...


Bonjour, j'ai utilisé "RelaxedurLtofileSystemMapping =" vrai "", mais cela ne pouvait pas courir en direct, travailler uniquement dans Mylocal



14
votes

Voici un bel article de Hanselman expliquant tous les coins et recoins liés à votre problème:

Expériences à la fenêtre: Autoriser les percents, les crochets d'angle et autres objets coquins dans l'ASP.NET / IIS Demandez l'URL


0 commentaires