2010-10-21 34 views
2

Compte tenu url /Page.aspx?a=b&title=apples+%26+pears, Request.Url retourne /Page.aspx?a=b&title=apples+&+pearsQuerystring la propriété url codée esperluette prématurément décodé dans les Request.Url

Notez que l'esperluette url codée dans la deuxième paire clé-valeur a été automatiquement décodé. Les autres caractères réservés codés par l'URL ne sont pas décodés automatiquement.

Est-ce que ce comportement est correct?

EDIT: Le problème est que la propriété Request.Url décode automatiquement l'esperluette codée lorsque je ne m'y attendais pas.

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

Répondre

2

Url propriété du Request est décodé dans une méthode interne appelée CollapsePercentUFromStringInternal.

Vous pouvez le voir dans le réflecteur. Ce que j'ai supposé est le comportement par défaut de toute façon.

Mise à jour

Vous pouvez utiliser la propriété RawUrl pour saisir l'URL non décodé.

+0

Merci pour votre réponse. Cela me semble contre-intuitif. Les valeurs Querystring ** ** ne doivent pas être auto-décodées. –

+0

@Arnold Il existe une propriété RawUrl que vous pouvez utiliser si vous le souhaitez et si elle n'est pas décodée. – Aliostad

+0

RawUrl est relatif, mais il m'a conduit à la bonne solution. J'ai marqué votre réponse comme acceptée. –

2

caractères réservés URL utilisent des caractères pour une utilisation particulière dans la définition de leur syntaxe. Lorsque ces caractères ne sont pas utilisés dans leur rôle spécial dans une URL, ils doivent être codés.

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

charracters UNSAFE

Certains caractères présentent la possibilité d'être mal compris dans les URL pour diverses raisons. Ces caractères doivent également toujours être codés.

caractère pourcentage ("%")

caractère 'Livre' (le "#")

moins de » symbole ("< ") 'symbole' plus grand que (">") espace

Ainsi, le comportement de l'encodage d'URL est correct ..

+0

Les valeurs de chaîne de requête * sont * en cours d'encodage. Le problème est que la propriété Request.Url décode automatiquement l'esperluette codée lorsque je ne m'y attends pas. –