2010-10-21 16 views
1

Je tente d'utiliser HttpUtility.UrlEncode pour coder les chaînes qui sont finalement utilisées dans les URL.MVC HttpUtility.UrlEncode

exemple

/string/http://www.google.com

ou

/string/ma chaîne de test

http://www.google.com est un paramètre passé à un contrôleur.

J'ai essayé UrlEncode mais il ne semble pas fonctionner tout à fait raison

mon itinéraire ressemble à:

routes.MapRoute(
      "mStringView", 
      "mString/{sText}", 
      new { controller = "mString", action = "Index", sText = UrlParameter.Optional } 
     ); 

Le problème est les bits codés sont décodés il semble quelque part dans le routage .. sauf des choses comme "+" qui remplacent "" ne sont pas décodés ..

Comprendre mon cas, où un UrlParameter peut être n'importe quelle chaîne, y compris les URL .. quelle est la meilleure façon de les encoder avant de les pousser dans mon db, puis gérer le décodage en sachant qu'ils seront l être passé à un contrôleur en tant que paramètre?

merci!

+0

À quoi ressemblent les URL codées?L'exemple de google devrait montrer '/ string/http% 3a% 2f% 2fwww.google.com' –

+0

ok voici le problème/String/rich% 27s + tags + paramètre de test au contrôleur est" test de tags de riches "et/Tag/testing + un autre paramètre tag au contrôleur est "testing + another + tag" donc les plus ne sont pas remplacés pour cette chaîne ???? Je ne comprends pas .. – toddm

+0

Vous devrez peut-être faire Http.UrlDecode sur votre code de contrôleur avant d'utiliser la valeur. –

Répondre

1

Il semble que ce problème a été soulevé dans d'autres forums et la recommandation générale est de ne pas compter sur le codage d'URL standard pour asp.net mvc. L'avantage est que l'encodage de l'URL n'est pas nécessairement aussi convivial que nous le souhaitons, ce qui est l'un des objectifs des URL routées personnalisées. Par exemple, ceci:

http://server.com/products/Goods+%26+Services 

peut être plus sympathique écrit

http://server.com/products/Good-and-Services 

encodage url donc sur mesure a des avantages au-delà travailler autour de cette bizarrerie/bug. Plus de détails et exemples ici:

http://www.dominicpettifer.co.uk/Blog/34/asp-net-mvc-and-clean-seo-friendly-urls

0

Si le problème est que le « + » ne soit pas décodé, utilisez HttpUtility.UrlPathEncode coder et le décodage fonctionnera comme souhaité.

De l'documentation of HttpUtility.UrlEncode:

Vous pouvez coder une URL en utilisant la méthode URLEncode ou la méthode de UrlPathEncode. Cependant, les méthodes retournent des résultats différents. La méthode UrlEncode convertit chaque caractère espace en un caractère plus (+). La méthode UrlPathEncode convertit chaque caractère espace dans la chaîne "% 20", qui représente un espace en notation hexadécimale. Utilisez la méthode UrlPathEncode lorsque vous codez la partie chemin d'une URL dans afin de garantir une URL décodée cohérente, quelle que soit la plate-forme ou le navigateur qui effectue le décodage.