2012-03-15 15 views

risposta

9

Se si ha realmente bisogno il percorso nonni, si può ottenere dal percorso principale utilizzando Path.GetDirectoryName():

string root = Server.MapPath("~"); 
string parent = Path.GetDirectoryName(root); 
string grandParent = Path.GetDirectoryName(parent); 

Ma la vostra applicazione web molto probabilmente non sarà necessario il permesso di leggere o scrivere lì - I non sono sicuro di cosa farai con questo.

+2

radice, genitori e nonni tutti restituiscono lo stesso percorso. Perché? –

+1

Davvero? Non ho un sito ASP.NET a portata di mano per testare questo, ma ho provato un esempio in LINQPad a partire da c: \ inetpub \ wwwroot \ myapp e ha funzionato OK.Sarei sorpreso se Path fosse impostato per limitarti, dopotutto è solo l'elaborazione di una stringa. Quindi non l'ho testato nell'ambiente esatto, ma sono sorpreso che non funzioni. (Mi rendo conto ora che il mio codice presuppone che root non abbia una barra finale - potresti aver bisogno di un altro Path.GetDirectoryName per sbarazzartene se esiste.) – Rup

3

Iniziare con la radice del sito con ~ e specificare il percorso completo: ~/Archive/Content.

Non è possibile tornare al di sopra della radice del sito a causa di restrizioni di sicurezza, vedere anche this article da altre soluzioni.

IIS impedisce intenzionalmente di servire il contenuto direttamente al di fuori del percorso del sito. Tuttavia, è possibile creare una directory virtuale in IIS e avere il punto di riscrittura ISAPI. Ad esempio, creare una directory virtuale denominata/staticfiles che punta a c: \ test \ data \ static-files. Per quanto riguarda IIS, che è direttamente fuori della radice del sito in una cartella denominata/staticfiles.

+0

Come mi aiuta? Non torna indietro. –

+0

Torna dove? Specifica il percorso di ** Contenuto ** a partire dalla radice del sito web. –

+0

Il file in cui sto scrivendo il comando non è nello stesso progetto come il sito web. –

3

È possibile utilizzare Parent.Parent.FullName

string grandParent = new DirectoryInfo(HttpContext.Current.Server.MapPath("~/")).Parent.Parent.FullName; 
0

Poiché si utilizza MapPath si sono sempre restituito un percorso fisico (\) da un percorso virtuale (/).

La creazione di un oggetto DirectoryInfo o l'utilizzo di un metodo di utilità Path a partire dalla root dell'app dell'app non fornirà necessariamente le aspettative, a meno che il padre virtuale e il nonno virtuale abbiano la stessa gerarchia della struttura fisica delle directory.

mie applicazioni non sono fisicamente annidati in modo che corrisponda alla profondità Url. Questo potrebbe anche essere il caso se è coinvolta una directory virtuale.

Ipotizzando un'applicazione nonno è di due cartelle virtuali up Questo si otterrebbe il percorso fisico ...

string physicalGrandparentPath = HttpContext.Current.Server.MapPath("~/../../"); 

Utilizzando questo sarebbe tenervi al sicuro da eventuali giochi virtuali directory riordino in corso nella configurazione di IIS.

Ho usato questo per vedere quanto lontano potevo salire. Non ho ricevuto una HttpException finché non ho provato ad andare sopra wwwroot.

Problemi correlati