Howto permettre de “caractères Illégaux dans le chemin d'accès”?
J'ai un MVC.NET avec un parcours comme suit:
routes.MapRoute("member", "member/{id}/{*name}", new { controller = "member", action = "Details", id = "" }, new { id = @"\d+" });
Ainsi, un lien pourrait être quelque chose comme ceci: http://domain/member/123/any_kind_of_username
Cela fonctionne bien en général, mais si le chemin d'accès contient des caractères illégaux (par exemple, un double qoute: http://domain/member/123/my_"utilisateur"_name), je reçois un "Système.ArgumentException: caractères Illégaux dans le chemin."
Après beaucoup de googler les meilleures suggestions semble être à assurez-vous que l'url ne contient pas ces caractères. Malheureusement, cela est hors de mon contrôle dans ce cas.
Est-il un moyen de contourner cela?
Peuvent pas être codées dans l'URL?
Eh bien, une double citation, par exemple, fonctionne très bien pour Apache donc je ne vois pas pourquoi IIS ne le permettrait pas. @Oded - Le problème est que je ne suis pas dans le contrôle de ces url.
OriginalL'auteur hbruce | 2010-01-18
Vous devez vous connecter pour publier un commentaire.
Scott, Hanselman posté un bon résumé sur permettant à caractères illégaux dans le chemin.
Si vous voulez vraiment permettre aux personnages qui sont restreints, les retirer de la liste en modifiant votre site web.config (cela ne fonctionnera probablement .NET 4 et sur IIS7):
Vous pouvez aussi avoir besoin de faire comme hbruce suggère:
Il y a toujours certains de certains chemins qui ne fonctionnera pas, (comme /search/% ) des que vous aurez l'400 "Bad Request - URL non Valide" message. La seule solution que j'ai trouvé est d'utiliser cette partie comme une querystring: /recherche?q=% avec les étapes ci-dessus.
OriginalL'auteur bkaid
S'avère que vous pouvez éviter cela en définissant allowDoubleEscaping="false" pour requestFiltering dans le web.Config.
I. e:
Peut-être pas la solution idéale (des suggestions pour l'améliorer est très apprécié), mais il résout le problème.
assez d'effets indésirables graves -- vous ne pouvez plus utiliser des caractères comme
+
dans les Url si vous activez ce paramètre. voir: stackoverflow.com/questions/1453218/...OriginalL'auteur hbruce
Vous devez encoder l'URL du client à la fin avant de le soumettre. Essayez d'utiliser le UrlHelper.Coder méthode.
Je suis arriver que, même lorsqu'ils sont encodés URI est envoyé à partir d'un client
"suggestions semble être à assurez-vous que l'url ne contient pas ces caractères. Malheureusement, cela est hors de mon contrôle dans ce cas."
OriginalL'auteur Vince Bowdren
Que sur une esperluette (&) dans l'url? Par exemple: mysite.com/JellyBeans/PB&J, où "PB&J" est la valeur d'un paramètre à une méthode d'action du contrôleur. Comment obtenez-vous autour de la MVC et le ASP.NET moteur de traitement que comme un trafic de chevalier dans l'url de base de la chaîne? Codage avec un %26 ne fonctionne pas. Chose étrange, lors du lancement de VS de débogage du serveur web local (VS serveur web intégré) traite de ce cas très bien (à la fois comme un & %26), mais lorsqu'il est déployé sur un serveur web exécutant IIS7 l'url des résultats dans un "Bad Request".
C'est une question de suivi meilleurs posté une nouvelle question et si le lien ici, lié à un commentaire, pas une Réponse. Dans ce cas, il est probablement déjà été demandé, afin de trouver la Question existante est mieux au lieu de demander à nouveau.
OriginalL'auteur Justin Schwartzenberger