2009-01-02 7 views
1

J'ai des actions qui prennent des paramètres d'identification de chaîne qui sont basées sur un nom d'utilisateur qui peut inclure des caractères nécessitant un encodage, par exemple « utilisateur? 1 »UrlEncode de lien ids avec ASP.NET MVC HtmlHelper méthodes d'extension

Si je Utilisez ActionLink() pour générer les liens, en passant la chaîne sans codage, il génère un lien comme celui-ci: http:\\localhost\controller\action\user?1, et l'action est passée "user" comme ID.

Si je UrlEncode() la chaîne avant de le passer à ActionLink, le lien généré est: http:\\localhost\controller\action\user%253f1 comme ActionLink va alors encoder le caractère '%' pour vous. En plus de cela, il génère une erreur HTTP 400 - Bad Request en suivant le lien dont je n'ai pas encore retrouvé la cause.

Y at-il un moyen que je peux générer l'URL comme: http:\\localhost\controller\action\user%3f1?

Répondre

0

Que diriez-vous de supprimer le? caractère ou en le remplaçant par quelque chose d'autre comme un tiret (-) ou un trait de soulignement (_)?

+0

L'idée est que le slug d'url est en fait une chaîne générée par l'utilisateur, dans le cas actuel c'est son nom d'utilisateur. Je ne suis malheureusement pas en mesure de contraindre les caractères autorisés car il s'agit d'un système existant avec des utilisateurs existants. – Giraffe

+0

L'inquiétude avec le remplacement des caractères est-ce que si quelqu'un essayait d'enregistrer un nouveau compte en tant qu'utilisateur-1 ou utilisateur_1? Quelle serait leur limace url si j'avais utilisé l'un de ceux-ci pour l'utilisateur? 1? – Giraffe

+0

que diriez-vous de ne pas autoriser? dans le nom d'utilisateur alors? – ajma

0

Vous devriez regarder dans le fichier Global.asax.cs

ajouter un autre itinéraire pour votre commodité, dans ce cas, la ff. pourrait fonctionner:

 routes.MapRoute(
      null,        
      "{controller}/{action}/user/{id}", 
      new { controller = "Home", action = "Index" } 
     ); 

Je suppose que cela est ce que vous voulez, à l'action séparée pour chaque utilisateur, mais je vous suggère d'utiliser cookies à cet effet. PS: N'oubliez pas de mettre celui-ci en haut de votre route par défaut puisque le routage essaie de faire correspondre de haut en bas.

0

Vous pouvez créer un plugin jquery qui vérifie tous les liens et remplace le caractère que vous devez remplacer par la nouvelle valeur. et après avoir appliqué ce plugin à tous les ActionLinks

Questions connexes