2010-10-21 68 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