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

Chr*_*ill 19 asp.net-mvc urlencode razor

我正在尝试使用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.像我在其他地方使用过的方案.

所以目前我正在试图弄清楚如何使用字符串函数创建它我已经尝试过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>
Run Code Online (Sandbox Code Playgroud)

输出文本总是有加号和等号,并且不起作用.我需要哪种组合?!

Chr*_*ill 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>
Run Code Online (Sandbox Code Playgroud)

编辑2015 - 如Jerads所述 - 解决方案是仅编码查询字符串元素而不是整个URL - 这就是上面所做的.


Dea*_*ker 5

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

System.Net.WebUtility.UrlEncode(MyVariableName)
Run Code Online (Sandbox Code Playgroud)

如果 Url.Encode 不起作用,请尝试上述方法。另外,如前所述,不要在整个 URL 字符串上使用它,只需将它用于单个查询字符串变量。否则你的网址很可能无法工作。