Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

URL Encode string for Href ASP.NET MVC / Razor

I'm trying to build an Href using Razor The string is going to end up looking like this:

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

In my model I have the order id and the hash string As the route is not a part of my site I don't believe I can use the default methods like @Url.Action and therefore can't use protocol: Request.Url.Scheme like I've used elsewhere.

So at present I'm trying to figure out how to create this using string functions I've tried Url.Encode Url.EscapeDataString Html.Encode but am getting no where fast:

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

The output text always has plusses and equals in them and doesn't work. Which combination do I need?!

like image 453
Chris Nevill Avatar asked Jan 16 '14 10:01

Chris Nevill


3 Answers

I've figured out a way of doing it:

@{
  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 - As mentioned by Jerads post - The solution is to only encode the query string elements and not the whole URL - which is what the above does.

like image 50
Chris Nevill Avatar answered Nov 15 '22 09:11

Chris Nevill


The problem is that you're trying to encode the whole URL. The only pieces you want to encode are the querystring values, and you can just use Url.Encode() for this.

You don't want to encode the address, the querystring params, or the ? and & delimiters, otherwise you'll end up with an address the browser can't parse.

Ultimately, it would look something like this:

<a href="https://www.notmysite.co.uk/controller/[email protected](Model.bookingNumber)&[email protected](Model.hashCode)">Click Here to be transferred</a>
like image 20
Jerad Rose Avatar answered Nov 15 '22 09:11

Jerad Rose


This was the first link that came up for this issue for me. The answers didn't work for me though because I am using core, I think. So wanted to add this in.

System.Net.WebUtility.UrlEncode(MyVariableName)

If Url.Encode doesn't work try the above. Also as stated before don't use this on the entire URL string, just use it for the individual querystring variables. Otherwise there is a good chance your URL wont work.

like image 4
Deathstalker Avatar answered Nov 15 '22 11:11

Deathstalker