代码之家  ›  专栏  ›  技术社区  ›  Arnold Zokas

带有URL编码的和号的querystring在请求中过早解码。url

  •  2
  • Arnold Zokas  · 技术社区  · 14 年前

    给定URL /Page.aspx?a=b&title=apples+%26+pears , Request.Url 返回属性 /Page.aspx?a=b&title=apples+&+pears

    请注意,第二个键值对中的URL编码的和号已被自动解码。 其他URL编码的保留字符不会自动解码。

    这种行为正确吗?

    编辑: 问题是request.url属性正在自动解码编码的和号,而我不希望这样做。

    答: string.Format("{0}://{1}{2}", Request.Url.Scheme, Request.Url.Host, Sitecore.Context.Request.RawUrl)

    2 回复  |  直到 14 年前
        1
  •  2
  •   Aliostad    14 年前

    Url 性质 Request 在内部方法中解码 CollapsePercentUFromStringInternal .

    你可以在反射镜里看到这个。我认为这是 违约行为 不管怎样。

    更新

    可以使用rawurl属性获取未解码的URL。

        2
  •  2
  •   FosterZ    14 年前

    保留字符 URL在定义其语法时使用了一些特殊的字符。当这些字符不在URL中的特殊角色中使用时,需要对它们进行编码。

     
     Dollar          ("$")
     Ampersand       ("&")
     Plus            ("+")
     Comma           (",")
     Forward slash   ("/")
     Colon           (":")
     Semi-colon      (";")
     Equals          ("=")
     Question mark   ("?")
     'At' symbol     ("@")
    

    不安全的量角器

    有些字符可能由于各种原因而在URL中被误解。这些字符也应该始终进行编码。

    百分比字符(“%”)

    “磅”字符(“”)

    小于'symbol(“<”) “大于”符号(“>”) 空间

    所以URL编码的行为是正确的。