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)