【问题标题】:URL Encode string for Href ASP.NET MVC / RazorHref ASP.NET MVC / Razor 的 URL 编码字符串
【发布时间】:2014-01-16 10:39:30
【问题描述】:

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

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

【问题讨论】:

    标签: asp.net-mvc razor urlencode


    【解决方案1】:

    我想出了一个办法:

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

    【讨论】:

      【解决方案2】:

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

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

      最终,它看起来像这样:

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

      【讨论】:

      • 我不太确定你的回答是否在我的基础上添加了任何东西,除了它都在一条线上...... Url.Encode 和 Uri.EscapeDataString 似乎是同一枚硬币的两个面@987654321 @我想你已经对正在发生的事情有了一个解释......但这可能是一个评论?
      • some differences,但除了内联之外,我澄清的重要部分是你没有提到你试图编码完整的 URL,而不仅仅是那些需要编码。
      • 这就是我的回答 - 它不编码完整的 URL。我只是不认为您的答案是新答案。只是我的答案是更好的糖衣。
      • 作为旁注,您在该评论中链接到与我相同的文章。我确实读过它。如果有什么听起来像 EscapeDataString 更符合 RFC 3986 的...但是以非常小的方式...我认为这不会影响这里的绝大多数人。
      • 这是只对 URL 的 部分 进行编码的好技巧,有时这比对整个 URL 进行编码更必要且更可取。 +1
      【解决方案3】:

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

      System.Net.WebUtility.UrlEncode(MyVariableName)
      

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2018-03-27
          • 2011-11-23
          • 2011-05-03
          • 2012-05-29
          • 1970-01-01
          • 2016-10-10
          • 1970-01-01
          • 1970-01-01
          • 2012-07-13
          相关资源
          最近更新 更多