working tag sintaxis route not net mvc data asp all asp.net-mvc razor urlencode

asp.net-mvc - tag - sintaxis razor mvc 5



Cadena de codificación URL para Href ASP.NET MVC/Razor (4)

El método más fácil es usar @ Html.Raw (Model.SomethingUrl)

Estoy tratando de construir un Href usando Razor La cadena va a terminar pareciéndose a esto:

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

En mi modelo tengo el ID de pedido y la cadena de hash Como la ruta no forma parte de mi sitio, no creo que pueda usar los métodos predeterminados como @ Url.Action y, por lo tanto, no puedo usar el protocolo: Request.Url. Esquema como el que he usado en otros lugares.

Así que en este momento estoy tratando de descubrir cómo crear esto usando funciones de cadena. He intentado Url.Encode Url.EscapeDataString Html.Encode pero no estoy llegando a ningún lado rápido:

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

El texto de salida siempre tiene plusses e iguales en ellos y no funciona. ¿Qué combinación necesito?


El problema es que estás tratando de codificar toda la URL. Las únicas partes que desea codificar son los valores de la cadena de consulta, y puede usar Url.Encode() para esto.

¿No desea codificar la dirección, los parámetros de la cadena de consulta o el ? y & delimitadores, de lo contrario, terminará con una dirección que el navegador no puede analizar.

En última instancia, se vería algo como esto:

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


Este fue el primer enlace que surgió para este problema para mí. Sin embargo, las respuestas no funcionaron para mí porque estoy usando el núcleo, creo. Así que quería añadir esto en.

System.Net.WebUtility.UrlEncode(MyVariableName)

Si Url.Encode no funciona, intente lo anterior. Además, como se indicó anteriormente, no use esto en toda la cadena de URL, solo úselo para las variables individuales de la cadena de consulta. De lo contrario, es probable que su URL no funcione.


He descubierto una manera de hacerlo:

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

Edición 2015 - Como lo mencionó la publicación de Jerads - La solución es codificar solo los elementos de la cadena de consulta y no la URL completa, que es lo que hace lo anterior.