2012-04-03 8 views
6

Come posso impedire alla classe System.Uri di decodificare un URL codificato passato nel suo costruttore? Considerare il seguente codice: -Come posso impedire a System.Uri di annullare la codifica di un URL?

Uri uri = new Uri("http://foo.bar/foo%2FBar"); 
Console.WriteLine(uri.AbsoluteUri); 
uri = new Uri("http://foo.bar/foo%2FBar", false); 
Console.WriteLine(uri.AbsoluteUri); 
uri = new Uri("http://foo.bar/foo%2FBar", true); 
Console.WriteLine(uri.AbsoluteUri); 

In ogni caso l'output è "http://foo.bar/foo/bar". Come posso garantire che dopo aver istanziato un'istanza Uri, Uri.AbsoluteUri restituirà "http://foo.bar/foo%2FBar"?

risposta

4

La classe Uri non viene utilizzata per generare un URI di escape, sebbene sia possibile utilizzare uri.OriginalString per recuperare la stringa utilizzata per l'inizializzazione. Probabilmente dovresti usare UrlEncode se hai bisogno di ricodificare un URI in sicurezza.

Inoltre, come da http://msdn.microsoft.com/en-us/library/9zh9wcb3.aspx il parametro dontEscape nell'inizializzatore Uri è stato deprecato e sarà sempre falso.

UPDATE:

Sembra che qualcuno ha trovato un modo (hack) per fare questo - GETting a URL with an url-encoded slash

+0

Sono già usando UrlEncode. Il mio problema è in realtà quando si tenta di costruire un'istanza HttpWebRequest per effettuare una chiamata REST in cui l'URL potrebbe avere caratteri di escape (inclusa una barra come dimostrato sopra). Stavo usando il sovraccarico WebRequest.Create (UrlString) per creare la richiesta, e ho scoperto che l'URL passato al server stava annullando la codifica della barra codificata, causando un errore lato server. Ulteriori test hanno rivelato che questo era probabilmente un problema con la classe Uri, da qui la mia domanda. – Cleggy

+0

Vedere il collegamento nell'aggiornamento – PinnyM

+0

Grazie per il collegamento lì, PinnyM. A causa della natura del "Terribile hack", mi chiedo se dovrei seguire questa strada, o prendere un'altra virata per risolvere il mio problema. Attualmente sto tentando di chiamare un servizio REST, ma ho la flessibilità di cambiarlo in uno SOAP, che dovrebbe anche alleviare questo problema. Tuttavia, hai risolto questo particolare problema, quindi contrassegnerò questa come la risposta corretta. – Cleggy

Problemi correlati