2012-04-13 11 views
6
var baseUri = new Uri("http://localhost/"); 
var uri1 = new Uri(baseUri, "1"); 
var uri2 = new Uri(uri1, "2"); 

Inaspettatamente, uri2 è http://localhost/2. Come dovrei aggiungere a uri1 quindi è http://localhost/1/2 intead? Uri esegue questa operazione o è necessario eseguire il fallback sulle stringhe? Per inciso, ho provato ad aggiungere barre iniziali/finali quasi ovunque.Aggiungendo più segmenti con System.Uri

risposta

11

"1" e "2" sono "parte del nome file" di un URL. Se si effettua "1" a guardare più come il percorso della directory che funzionerà ok "1 /":

var baseUri = new Uri("http://localhost/"); 
var uri1 = new Uri(baseUri, "1/"); 
var uri2 = new Uri(uri1, "2"); 

Nota: "parte del nome del file" non è un vero e proprio termine, come Url hanno solo "percorso" e " query "component, ma normalmente l'ultimo chunk di un percorso è trattato come nome file:" /foo/bar/file.txt ".

Quando si combinano 2 percorsi, si desidera sostituire una porzione di coda del primo percorso con la seconda. Nel tuo caso finisce per avere solo il segmento "file name" per entrambi: "/ 1" e "2" (se metti il ​​valore reale come "/myFile.txt" e "NewFile.txt" nel combinarlo sarebbe più facile per vedere perché si comporta in questo modo).

+0

Ah, questo è un posto in cui non avrei dovuto provare a mettere una barra. – Daniel

+1

Eliminare la mia risposta. Inoltre, questo è verificato qui http://compilify.net/bd –

+0

@Daniel, ho anche aggiornato una risposta per mostrare perché si comporta in questo modo ... –