web-dev-qa-db-fra.com

Chaîne d'encodage d'URL pour Href ASP.NET MVC/Razor

J'essaie de construire un Href en utilisant Razor La chaîne va ressembler à ceci:

https: //www.notmysite/controller/action ORDER_ID = xxxxxxx & hashComparator = iFxp3% 2BszAMaEB% 2FnHCtRr9Ulhv0DumtyDumCik4gKypJqi0BdOGXXsr9QDkfefAsLaR1Xy% 2BrX9VcuzP1pF2k6dL% 2F92UxphzTKqNAZP2SSZGWtvyO5az% 2F9JvDY% 2Bsq5TBQo7% 2FYAAMIU4QxiSX1SBKk8SUNECW3ZmKM% 3D

Dans mon modèle, j'ai l'identifiant de la commande et la chaîne de hachage Comme l'itinéraire ne fait pas partie de mon site, je ne pense pas pouvoir utiliser les méthodes par défaut telles que @ Url.Action protocol: Request.Url.Schemelike que j'ai utilisé ailleurs.

Donc, à l’heure actuelle, j’essaie de comprendre comment créer ceci en utilisant des fonctions de chaîne. vite:

<a href="@Uri.EscapeDataString("https://www.notmysite.co.uk/controller/action?order_ID=" + Model.bookingNumber + "&hashComparator=" + Model.hashCode)">Click Here to be transferred</a>

Le texte de sortie contient toujours des points forts et des points égaux et ne fonctionne pas ... De quelle combinaison ai-je besoin?!

17
Chris Nevill

J'ai trouvé un moyen de le faire:

@{
  var url = string.Format(
      "https://www.notmysite.co.uk/controller/action?order_ID={0}&hashComparator={1}",
      @Uri.EscapeDataString(Model.bookingNumber.ToString()),
      @Uri.EscapeDataString(Model.hashCode));
}
 <p><a href="@url">Click Here to be transferred</a></p>

Edit 2015 - Comme mentionné par Jerads post - La solution consiste à n'encoder que les éléments de la chaîne de requête et non l'URL complète - comme indiqué ci-dessus.

40
Chris Nevill

Le problème est que vous essayez de coder l'intégralité de l'URL. Les seuls éléments que vous souhaitez encoder sont la chaîne de requête values ​​, et vous pouvez simplement utiliser Url.Encode() pour cela.

Vous ne voulez pas encoder l'adresse, les paramètres de chaîne de requête ou les délimiteurs ? et &, sinon vous obtiendrez une adresse impossible à analyser par le navigateur.

En fin de compte, cela ressemblerait à quelque chose comme ceci:

<a href="https://www.notmysite.co.uk/controller/[email protected](Model.bookingNumber)&[email protected](Model.hashCode)">Click Here to be transferred</a>
1
Jerad Rose

Ce fut le premier lien qui a été soulevé pour cette question pour moi. Les réponses n'ont pas fonctionné pour moi cependant parce que j'utilise le noyau, je pense. Je voulais donc ajouter ceci dans.

System.Net.WebUtility.UrlEncode(MyVariableName)

Si Url.Encode ne fonctionne pas, essayez ce qui précède. De plus, comme indiqué précédemment, n'utilisez pas cette option sur la chaîne d'URL complète, utilisez-la simplement pour les variables de chaîne de requête individuelles. Sinon, votre URL risque de ne pas fonctionner.

0
Deathstalker