URL编码Href ASP.NET MVC / Razor的字符串

时间:2014-01-16 10:39:30

标签: asp.net-mvc razor urlencode

我正在尝试使用Razor构建Href 该字符串最终将如下所示:

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

在我的模型中,我有订单ID和哈希字符串 由于路线不是我网站的一部分,我不相信我可以使用@ 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>

输出文本在其中始终具有加号和等号,并且不起作用。 我需要哪种组合?!

4 个答案:

答案 0 :(得分:40)

我找到了一种方法:

@{
  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 - 如Jerads所述 - 解决方案是仅对查询字符串元素进行编码,而不是对整个URL进行编码 - 这就是上面所做的。

答案 1 :(得分:2)

问题在于您正在尝试对整个网址进行编码。您要编码的唯一部分是查询字符串,您可以使用x进行编码。

您不希望对地址,查询字符串参数或Url.Encode()?分隔符进行编码,否则您最终会得到浏览器无法解析的地址。

最终,它看起来像这样:

&

答案 2 :(得分:-1)

这是我为此问题提出的第一个链接。答案对我来说不起作用,因为我认为我正在使用核心。所以想把它添加进来。

System.Net.WebUtility.UrlEncode(MyVariableName)

如果Url.Encode不起作用,请尝试以上操作。同样如前所述,不要在整个URL字符串上使用它,只需将它用于各个查询字符串变量即可。否则,您的网址很可能无法正常工作。

答案 3 :(得分:-3)

更简单的方法是使用@ Html.Raw(Model.SomethingUrl)