ASP.Net: HTTP 400 Bad Request erreur lors du traitement de http://localhost:5957/http://yahoo.com
Je suis en train de créer quelque chose de similaire à la diggbar : http://digg.com/http://cnn.com
Je suis à l'aide de Visual Studio 2010 et de Asp serveur de Développement.
Cependant, je ne peux pas obtenir l'ASP serveur de dev pour traiter la demande car il contient "http:" dans le chemin. J'ai essayé de créer un HTTPModule à réécrire l'URL dans la BeginRequest , mais le gestionnaire d'événement n'est pas appelée lorsque l'url est http://localhost:5957/http://yahoo.com. Le gestionnaire d'événement est appelé si l'url est http://localhost:5957/http/yahoo.com
Pour résumer
- http://localhost:5957/http/yahoo.com œuvres
- http://localhost:5957/http//yahoo.com ne fonctionne pas
- http://localhost:5957/http://yahoo.com ne fonctionne pas
- http://localhost:5957/http:/yahoo.com ne fonctionne pas
Des idées?
Comment sur le marquage d'une réponse?
OriginalL'auteur mat3 | 2009-06-04
Vous devez vous connecter pour publier un commentaire.
J'ai écrit un article avec Stefan d'aide qui explique comment faire:
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
OriginalL'auteur Scott Hanselman
De Stefan sur le ASP.Net équipe: http://forums.asp.net/p/1431148/3221542.aspx
Dans les versions actuelles de ASP.NET les Url contenant des caractères tels que le caractère deux-points sera rejetée comme une menace potentielle pour la sécurité. La raison historique à cela est que le sous-jacent du système de fichiers NTFS prend en charge remplaçant les ruisseaux qui peuvent être accessibles avec des noms comme "yourfile.txt:hiddendata.txt". Le blocage de la virgule à partir d'Url empêche mal écrit applications accidentellement de travail avec d'autres flux de ressources.
Il y a aussi une limitation dans les versions actuelles de ASP.NET que les Urls entrantes besoin de carte pour le système de fichiers NTFS pour les fins de détermination géré les données de configuration.
Dans ASP.NET 4 ces limitations peuvent éventuellement être supprimé. Cependant, ces modifications sont dans le Bêta 2 version de ASP.NET 4 - ils ne sont pas dans la Bêta 1. Nous avons essayé l'Url indiquée plus haut dans ce post sur le forum et ont confirmé que notre développement interne de ASP.NET 4 vous pouvez utiliser ce style d'Url et de le transformer sans aucune erreur 400.
-Stefan
OriginalL'auteur mat3
De Stefan sur le ASP.Net l'équipe de
Je ciselée suivantes à partir d'une prochaine Ce qui est Nouveau document couvrant Bêta 2:
ASP.NET 4 introduit de nouvelles options pour l'extension de la gamme admissible de l'application des Url. Le plus simple et le plus utile de la changer, c'est que ASP.NET donne aux développeurs la possibilité de permettre à plus de Url. Les versions précédentes contraint Url longueurs de chemin à 260 caractères (fichier NTFS chemin de limite). Dans ASP.NET 4, les développeurs ont la possibilité d'augmenter (ou diminuer si ils le veulent) de cette limite, selon les besoins de leurs applications à l'aide de deux nouveaux httpRuntime attributs de configuration:
Modifier la valeur de "maxRequestPathLength" pour permettre à plus longs ou plus courts chemins d'Url (la partie de l'Url sans protocole, le serveur et la chaîne de la requête). Modifier la valeur de "maxQueryStringLength" pour permettre à plus longue ou plus courte requête strings.ASP.NET 4 permet également aux développeurs de régler le jeu de caractères utilisé par ASP.NET s'Url de caractères de contrôles. Lorsque ASP.NET trouve un caractère non valide dans la partie du chemin d'accès de l'Url, il rejette la demande avec une erreur HTTP 400. Dans les versions précédentes de l'Url de caractères de contrôles ont été limitées à un ensemble fixe de caractères. Dans ASP.NET 4 les développeurs peuvent personnaliser le jeu de caractère vérifie à l'aide d'une autre nouvelle httpRuntime attribut de configuration:
Par défaut, le "requestPathInvalidChars" attribut contient sept caractères considérés comme non valides (les moins et les plus de signes en tant que bien que l'esperluette sont encodés depuis de configuration est un fichier Xml). Les développeurs peuvent alors développer ou de réduire l'ensemble des caractères non valides, selon les besoins de l'application. Notez que ASP.NET 4 sera encore de rejeter tout les chemins d'Url qui contiennent des caractères en ASCII caractère gamme de 0x00-0x1F car ceux-ci sont considérés comme non valides Url caractères (RFC 2396 considère que ces caractères non valides, et sur des Serveurs Windows exécutant IIS6 ou supérieur à la http.sys protocole de pilote de périphérique rejette automatiquement les Url avec ces personnages).
OriginalL'auteur mat3
J'ai eu exactement ce problème dans la création d'un Le raccourcisseur d'URL pour ASP.net. Pour la vie de moi, je ne pouvais pas obtenir le côlon codées de telle sorte que l'ASP de l'accepter, à l'aide HttpUtility.UrlEncode ou du javascript escape() sur le côté client.
Ma solution que faire de l'encodage Base64. Transforme toute chose en non-controversée alpha-numériques. Ensuite, vous décoder sur le serveur. J'ai utilisé ces fonctions.
Aussi, j'ai créé un HttpModule être déclenchée par un trait d'union, donc je sais pour manipuler ce qui suit comme une URL à être décodé. Ping-moi si vous souhaitez plus de détails.
OriginalL'auteur Matt Sherman
Vous devez utiliser HttpUtility.UrlEncode sur votre chaîne avant de la rediriger vers elle.
digg.com/http://cnn.com
OriginalL'auteur Dave Markle
Je ne suis pas sûr de ce serveur web digg est à l'aide, mais je suis à paris ce n'est tout simplement pas possible avec IIS ou le serveur web intégré pour VS. Le plus probable, c'est un serveur web qui peut être modifié afin de permettre à toutes sortes de farfelus Url.
Spencer, Merci pour la fixation de l'url. Il y a une gauche à droite en haut: digg.com/cttp://cnn.com. Très apprécié.
Fait...............
OriginalL'auteur Spencer Ruport
Ce n'est pas IIS échec, c'est l'ASP serveur de Développement. Essayez de déploiement de IIS et voir si cela fonctionne.
J'ai le même problème avec IIS 7, donc je ne pense pas que c'est juste un problème de serveur de dev.
OriginalL'auteur cjk
Je suis sûr que vous pourriez le faire avec IIS réécriture. ASP.NET Serveur de Développement ne peut pas faire de réécriture autant que je sache, mais vous pouvez essayer de le faire en utilisant soit IIS7 graveur ou si vous avez une version antérieure, par le Ionics ISAPI Rewrite Filtre.
OriginalL'auteur Tamas Czinege
L'article base de connaissances 826437 ( http://support.microsoft.com/kb/826437 ) contient une réponse à votre question
créez une valeur DWORD 32 bits de VerificationCompatibility = 1
Il a travaillé pour moi (IIS 6, ASP.NET 4), il sera probablement travailler pour vous, aussi
OriginalL'auteur wizzard0
Une solution rapide pour l'environnement de développement:
Changement de projet Web des propriétés à Utiliser IIS Serveur Local" et cochez la case "Utiliser IIS Express" (qui permet de conserver l'URL de VS Serveur de Dev).
Ajoutez le paramètre suivant dans le Web.config à l'intérieur de
<system.web>
:Pour un déploiement en production, prendre en compte les considérations de sécurité mentionnées dans d'autres réponses.
OriginalL'auteur Ricardo Stuven
J'ai répondu à une question similaire ici.
https://stackoverflow.com/a/12037000/134761
Fondamentalement, ASP.net accepte uniquement les caractères codés tels que le côlon après le point d'interrogation. Heureusement ASP.net MVC automatiquement maps /api/personnes/xxxx et /api/personnes?id=xxxx également dans le mappage par défaut, si c'est ce que j'ai fait.
OriginalL'auteur angularsen
Essayer
HttpUtility.UrlPathEncode(url)
- MSDN DocsOriginalL'auteur phill