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



我正在尝试使用 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.EncodeUrl.EscapeDataStringHtml.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>

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

我已经找到了一种方法:

@{
  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 进行编码 - 这就是上述功能。

这是我为这个问题出现的第一个链接。答案对我不起作用,因为我使用的是核心,我认为。所以想添加这个。

System.Net.WebUtility.UrlEncode(MyVariableName)

如果 Url.Encode 不起作用,请尝试上述操作。同样如前所述,不要在整个 URL 字符串上使用它,只需将其用于单个查询字符串变量即可。否则,您的URL很有可能不起作用。

问题是您正在尝试对整个 URL 进行编码。您唯一要编码的部分是查询字符串,您可以为此使用 Url.Encode()

您不想对地址、查询字符串参数或?&分隔符进行编码,否则您最终会得到浏览器无法解析的地址。

最终,它看起来像这样:

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

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

最新更新