2010-06-01 10 views
2

J'utilise le routage personnalisé dans un contexte de formulaires Web. J'ai quelques titres (une partie de ma route personnalisée) qui ont un caractère de point d'interrogation. Quand je l'URL coder ce texte ("Question?"), Puis passer dans mon itinéraire, j'obtiens un code d'erreur HTTP 400. Apparemment, le texte codé URL est en quelque sorte confus le gestionnaire de routage. Est-ce que quelqu'un peut fournir un contexte et une explication pour cela? Au-delà de cela, je pense que je n'ai pas besoin d'encoder ces données de route, mais simplement dépouiller les caractères de problème. Y a-t-il des risques de sécurité à ne pas utiliser le décodage/encodage d'URL? Et quels sont les personnages problématiques? Une liste serait utile.Url codage et routage?

Merci!

Mise à jour: Il semble que le caractère% n'est pas autorisé dans la chaîne de requête dans un itinéraire personnalisé. Réjouissez-vous de quelques bons commentaires sur cette question!

+0

Je pourrais être mal compris, mais, pour être absolument sûr, pourriez-vous encoder base64 sur le côté d'envoi et base64 décoder du côté de réception? – barrycarter

+0

@Barry qui irait à l'encontre de l'objectif d'avoir des chemins d'accès conviviaux en texte brut. –

Répondre

1

Voici ce que MS dit à propos du UrlEncode() 'L'encodage d'URL garantit que tous les navigateurs transmettront correctement le texte dans les chaînes d'URL. Des caractères tels qu'un point d'interrogation (?), Une esperluette (&), une barre oblique (/) et des espaces peuvent être tronqués ou endommagés par certains navigateurs. Par conséquent, ces caractères doivent être codés dans des balises ou dans des chaînes de requête dans lesquelles les chaînes peuvent être renvoyées par un navigateur dans une chaîne de requête.

En outre, vous ne devez encoder que les paramètres de requête, sinon le résultat entraînera des problèmes. Par exemple, si vous avez ce lien

http://www.contoso.com/articles.aspx?title=ASP.NET+Examples 

Et vous encodez l'ensemble, vous obtiendrez

http%3a%2f%2fwww.contoso.com%2farticles.aspx%3ftitle%3dASP.NET%2bExamples 

Pour plus de détails se référer à http://msdn.microsoft.com/en-us/library/zttxte6w.aspx

J'utilise le routage ASP.net qui vient avec la version 4.0. Voici un exemple de code http://weblogs.asp.net/scottgu/archive/2009/10/13/url-routing-with-asp-net-4-web-forms-vs-2010-and-net-4-0-series.aspx. Vous pouvez manipuler assez facilement vos liens. MISE À JOUR: Microsoft a apporté des modifications à IIS7 susceptibles de provoquer des problèmes de routage. Essayez donc de modifier le paramètre "Mode pipeline géré" du pool d'applications d'intégré à classique.

+0

Je ne suis pas l'encodage de la route entière, seule la requête et mon point utilise l'encodage d'URL sur le paramètre de requête ne fonctionne pas pour &,%, et quelques autres symboles inconnus. Fait intéressant, lorsque j'ai encodé pour et sur webdev cela a marché mais pas sur IIS 7 mais il y en a qui fonctionnent sur webdev et pas sur IIS 7. Je pense que c'était le point d'interrogation. J'ai temporairement résolu ceci en enlevant ces caractères de mes paramètres. –

+0

Quel paramètre de pool d'applications utilisez-vous? – Thea