在Request.Url中过早解码带有url编码的&符号的查询字符串

时间:2010-10-21 11:05:39

标签: .net asp.net query-string sitecore url-encoding

鉴于网址/Page.aspx?a=b&title=apples+%26+pearsRequest.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 个答案:

答案 0 :(得分:2)

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

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

UnSafe字符

由于各种原因,某些字符会出现在网址中被误解的可能性。这些字符也应始终编码。

  

字符百分比(“%”)

     

'磅'字符(“#”)

     

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

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

答案 1 :(得分:2)

Url

Request属性在名为CollapsePercentUFromStringInternal的内部方法中被解码。

你可以在反射器中看到这一点。我假设无论如何都是默认行为

<强>更新

您可以使用RawUrl属性来获取未解码的URL。