鉴于网址/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)
答案 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。