URL Encode string for Href ASP.NET MVC / Razor

2019-01-14 21:55发布

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?!

4条回答
Rolldiameter
2楼-- · 2019-01-14 22:30

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/action?order_ID=@Url.Encode(Model.bookingNumber)&hashComparator=@Url.Encode(Model.hashCode)">Click Here to be transferred</a>
查看更多
成全新的幸福
3楼-- · 2019-01-14 22:38

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.

查看更多
男人必须洒脱
4楼-- · 2019-01-14 22:44

The easier method is to use @Html.Raw(Model.SomethingUrl)

查看更多
萌系小妹纸
5楼-- · 2019-01-14 22:51

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.

查看更多
登录 后发表回答