2010-10-21 69 views
2

给定的URL /Page.aspx?a=b&title=apples+%26+pears过早解码,Request.Url属性返回/Page.aspx?a=b&title=apples+&+pears查询字符串与网址编码符号内Request.Url

注意,在第二键 - 值对URL编码符号已被自动解码。 其他网址编码的保留字符未被自动解码。

此行为是否正确?

编辑:问题是,Request.Url属性会自动解码编码符号,当我不期望它。

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

回答

2

Url财产的Request在内部方法CollapsePercentUFromStringInternal中被解码。

你可以在反射镜中看到它。无论如何,我认为这是默认行为

更新

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

+0

感谢您的回复。这对我来说似乎违反直觉。查询串**值**不应该被自动解码。 – 2010-10-21 11:29:43

+0

@Arnold有RawUrl属性,你可以使用,如果你需要和不解码。 – Aliostad 2010-10-21 11:37:44

+0

RawUrl是相对的,但它使我找到了正确的解决方案。我已经接受了你的答案。 – 2010-10-21 13:34:55

2

保留字符 网址中使用某些字符在定义它们的语法特殊的用途。当这些字符没有用在URL中的特殊角色中时,他们需要被编码。

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

不安全charracters

某些字符呈现的各种原因的URL内被误解的可能性。这些字符也应该始终编码。

百分号( “%”)

'英镑' 字符( “#”)

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

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

+0

查询字符串值*正在被编码。问题是,Request.Url属性会自动解码编码的&符号,当我不期望它。 – 2010-10-21 11:22:40