URL Кодировка строки для HREF ASP.NET MVC/Razor

Я пытаюсь построить Href с помощью Razor Строка будет выглядеть следующим образом:

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

В моей модели у меня есть идентификатор заказа и хэш-строка Поскольку маршрут не является частью моего сайта, я не считаю, что могу использовать стандартные методы, такие как @Url.Action и поэтому не может использовать протокол: Request.Url.Scheme как я использовал в другом месте.

Итак, в настоящее время я пытаюсь понять, как создать это, используя строковые функции я пробовал Url.Encode Url.EscapeDataString Html.Encode но я не знаю, где быстро:

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

Выходной текст всегда имеет плюсы и равен им и не работает. Какая комбинация мне нужна?!

Ответы

Ответ 1

Я выяснил, как это сделать:

@{
  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>

Изменить 2015 - Как упоминалось в сообщении Джедаша - Решение состоит в том, чтобы кодировать только элементы строки запроса, а не весь URL-адрес, что и было сделано выше.

Ответ 2

Проблема заключается в том, что вы пытаетесь кодировать весь URL-адрес. Единственными частями, которые вы хотите кодировать, являются значения querystring, и вы можете просто использовать Url.Encode() для этого.

Вы не хотите кодировать адрес, параметры запроса или разделители ? и &, иначе вы получите адрес, который браузер не может проанализировать.

В конечном итоге это выглядит примерно так:

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

Ответ 3

Более простой способ - использовать @Html.Raw(Model.SomethingUrl)