查询字符串与网址编码符号内Request.Url
给定的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)
Url
财产的Request
在内部方法CollapsePercentUFromStringInternal
中被解码。
你可以在反射镜中看到它。无论如何,我认为这是默认行为。
更新
可以使用RawUrl属性来获取未解码的URL的保持。
保留字符 网址中使用某些字符在定义它们的语法特殊的用途。当这些字符没有用在URL中的特殊角色中时,他们需要被编码。
Dollar ("$") Ampersand ("&") Plus ("+") Comma (",") Forward slash ("/") Colon (":") Semi-colon (";") Equals ("=") Question mark ("?") 'At' symbol ("@")
不安全charracters
某些字符呈现的各种原因的URL内被误解的可能性。这些字符也应该始终编码。
百分号( “%”)
'英镑' 字符( “#”)
小于”符号( “< ”) '大于' 符号(“>”) 空间
所以URL编码的行为是正确的..
查询字符串值*正在被编码。问题是,Request.Url属性会自动解码编码的&符号,当我不期望它。 – 2010-10-21 11:22:40
感谢您的回复。这对我来说似乎违反直觉。查询串**值**不应该被自动解码。 – 2010-10-21 11:29:43
@Arnold有RawUrl属性,你可以使用,如果你需要和不解码。 – Aliostad 2010-10-21 11:37:44
RawUrl是相对的,但它使我找到了正确的解决方案。我已经接受了你的答案。 – 2010-10-21 13:34:55