2009-09-29 11 views
33

io non sono in grado di ottenere il percorso fisico corrente all'interno Application_Start utilizzandoGet attuale percorso fisico domanda entro Application_Start

HttpContext.Current.Request.PhysicalApplicationPath 

perché non c'è Richiesta oggetto in quel momento.

In quale altro modo è possibile ottenere il percorso fisico?

+0

post correlati [qui] (https://stackoverflow.com/q/10951599/ 465.053). – RBT

risposta

41
protected void Application_Start(object sender, EventArgs e) 
{ 
    string path = Server.MapPath("/"); 
    //or 
    string path2 = Server.MapPath("~"); 
    //depends on your application needs 

} 
+2

Ulteriori informazioni sul percorso del server: http://stackoverflow.com/a/275791/133665 – HuBeZa

16

Usa Server.MapPath("~")

     

+4

Funziona meglio di Server.MapPath ("/"); perché il percorso dell'applicazione Web potrebbe non essere uguale a quello dell'applicazione root. –

+9

E 'HttpRuntime.AppDomainAppPath' funziona meglio di qualsiasi di questi, perché funziona in qualsiasi contesto, inclusi i contesti statici, mentre tutte le altre opzioni richiedono l'accesso all'istanza' HttpServerUtility' tramite la proprietà 'Server', che è disponibile solo all'interno contesto di un evento dell'applicazione come "Application_Start" o all'interno di una richiesta Web attiva. – Triynko

3

uso sottostante Codice

server.mappath() in asp.net

application.startuppath in C# applicazione finestre

22

è anche possibile utilizzare

HttpRuntime.AppDomainAppVirtualPath 
+10

Per il percorso fisico, in realtà si desidera 'HttpRuntime.AppDomainAppPath' che" Ottiene il percorso dell'unità fisica della directory dell'applicazione per l'applicazione ospitata nel dominio dell'applicazione corrente. " 'HttpRuntime.AppDomainAppVirtualPath' ottiene effettivamente un percorso virtuale come"/MyApp ". In entrambi i casi, l'utilizzo di HttpRuntime è il modo migliore per ottenere il percorso fisico dell'applicazione, poiché è disponibile in ogni contesto, inclusi i contesti statici anche prima che un oggetto 'HttpApplication' sia disponibile. – Triynko

+1

Le altre soluzioni pubblicate qui richiedono un'istanza 'HttpServerUtility' a cui accedere tramite la proprietà' Server', che è disponibile solo nel contesto di un evento dell'applicazione come "Application_Start" o all'interno di una richiesta Web attiva. – Triynko

+0

'HttpRuntime.AppDomainAppPath' –

3

C'è anche la statica HostingEnvironment.MapPath

9

È possibile utilizzare questo codice:

AppDomain.CurrentDomain.BaseDirectory

2

System.AppDomain.CurrentDomain.BaseDirectory

Questo vi darà la directory corrente della tua applicazione. Questo funziona anche per le applicazioni web. Successivamente, puoi raggiungere il tuo file.

1

C'è, tuttavia, leggera differenza tra tutte queste opzioni che

ho scoperto che

Se fai

string URL = Server.MapPath("~"); 

o

string URL = Server.MapPath("/"); 

o

string URL = HttpRuntime.AppDomainAppPath; 

l'URL visualizzerà le risorse nel vostro link come questo:

"file:///d:/InetPUB/HOME/Index/bin/Resources/HandlerDoc.htm" 

Ma se volete che il vostro URL per mostrare solo percorso virtuale non la posizione delle risorse, si dovrebbe fare

string URL = HttpRuntime.AppDomainAppVirtualPath; 

poi, il tuo URL sta visualizzando un percorso virtuale per le tue risorse come sotto

"http://HOME/Index/bin/Resources/HandlerDoc.htm"   
16

Ho creato un sito Web con ASP .Net WebForms in cui è possibile visualizzare il risultato dell'utilizzo di tutti i moduli citati nelle risposte precedenti da un sito in Azure.

http://wfserverpaths.azurewebsites.net/

Sommario:


Server.MapPath("/") => D:\home\site\wwwroot\ 

Server.MapPath("~") => D:\home\site\wwwroot\ 

HttpRuntime.AppDomainAppPath => D:\home\site\wwwroot\ 

HttpRuntime.AppDomainAppVirtualPath =>/

AppDomain.CurrentDomain.BaseDirectory => D:\home\site\wwwroot\ 

HostingEnvironment.MapPath("/") => D:\home\site\wwwroot\ 

HostingEnvironment.MapPath("~") => D:\home\site\wwwroot\ 
+0

Come posso ottenere: \\ myserver \ inetpub \ wwwroot \ myfolder anziché C: \ inetpub \ wwwroot \ myfolder .... – Si8

+1

Selezionare un'opzione sopra e scrivere questo piccolo codice: ' var pathComponents = AppDomain.CurrentDomain.BaseDirectory.Split (':'); pathComponents [0] = @ "\\" + System.Environment.MachineName; var resultPath = string.Join ("", pathComponents); ' – batressc

2

scelta migliore sta usando

AppDomain.CurrentDomain.BaseDirectory 

perché è in syst em spazio dei nomi e non v'è alcuna dipendenza a system.web

questo modo il vostro codice sarà più portatile

Problemi correlati