2013-08-22 17 views
6

Ecco una parte del mio codice:Il costruttore Uri (Uri, String) non funziona correttamente?

Uri branches = new Uri(@"https://127.0.0.1:8443/svn/CXB1/Validation/branches"); 
Uri testBranch = new Uri(branches, "test"); 

mi aspetto testBranches sarà https://127.0.0.1:8443/svn/CXB1/Validation/branches/test, ma è https://127.0.0.1:8443/svn/CXB1/Validation/test. Non riesco a capire perché il costruttore di Uri (stringa, Uri) mangia l'ultima parte del percorso.

+5

try 'rami uri = new Uri (@ "https://127.0.0.1:8443/svn/CXB1/Validation/branches/");' – I4V

+2

'Uri' non è un percorso, non funziona allo stesso modo di' Path.Combine'. http://stackoverflow.com/a/1527643/284240 (vedere i commenti) –

risposta

8

aggiungere una barra dopo rami

Uri branches = new Uri(@"https://127.0.0.1:8443/svn/CXB1/Validation/branches/"); 
    Uri testBranch = new Uri(branches, "test"); 
+0

L'aggiunta di una barra non ha aiutato. Ora ho 'https: //127.0.0.1: 8443/test' – Max

+0

L'aggiunta di una barra alla fine del primo url non ha alcun effetto perché il costruttore Uri (stringa) la rimuove. E 'branches' sarà' https: //127.0.0.1: 8443/svn/CXB1/Validation/branches' – Max

+0

Spiacente, ho trovato un probem in un'altra parte del codice. L'aggiunta di una barra funziona correttamente. Grazie. – Max

2

Questo è il comportamento previsto.

Se, in un browser, si erano su una pagina con la sua piena URI come https://127.0.0.1:8443/svn/CXB1/Validation/branches, e se, su quella pagina, si è fatto clic su un link che ha appena avuto un href di test, si dovrebbe prestare attenzione a https://127.0.0.1:8443/svn/CXB1/Validation/test. Ecco come un URI relativo è composto da un URI di base.

D'altra parte, se il primo URI terminasse con un /, funzionerebbe come sembra.

+0

Esiste una documentazione ufficiale per questo (vale a dire che l'URI dovrebbe comportarsi in questo modo)? Non sono riuscito a trovarne. –

+0

È [questo] (https://tools.ietf.org/html/rfc3986#section-5.2.3)? –

+0

@RovinBhandari - sì, quel secondo proiettile sembra averlo coperto - rimuovi tutti i caratteri alla destra dell'ultimo '/' prima di aggiungere il nuovo testo. –

3

Il comportamento visualizzato è corretto, in quanto la sostituzione dell'ultima parte è una buona idea se si desidera modificare il nome file.

Aggiungerei la barra rovesciata alla fine della prima parte. Quindi è chiaro che questa è una directory, altrimenti potrebbe essere interpretata come un file.

Uri branches = new Uri(@"https://127.0.0.1:8443/svn/CXB1/Validation/branches/"); 
Uri testBranch = new Uri(branches, "test"); 
Console.WriteLine(testBranch); 

otterrete questo output:

https://127.0.0.1:8443/svn/CXB1/Validation/branches/test 
Problemi correlati