2009-06-01 10 views
109

Devo utilizzare Server.MapPath() per combinare alcuni percorsi di file che memorizzo nello web.config.Come posso utilizzare Server.MapPath() da global.asax?

Tuttavia, poiché Server.MapPath() si basa sull'attuale HttpContext (credo), non riesco a farlo. Quando provo ad usare il metodo, anche se è "disponibile", ottengo la seguente eccezione:

Il funzionamento del server non è disponibile in questo contesto.

C'è un altro metodo che può mappare una directory relativa radice web come ~/App_Data/ al percorso fisico completo, come C:\inetpub\wwwroot\project\App_data\?

risposta

266

Si potrebbe provare System.Web.Hosting.HostingEnvironment.MapPath().

Nessun HttpContext richiesto.

+0

Eventuali avvertimenti a questa tecnica? –

+9

No. Se si attiva Reflector, si noterà che Server.MapPath e Request.MapPath chiamano in ultima istanza VirtualPath.MapPath che in definitiva chiama HostingEnvironment.MapPath. Finiscono tutti nello stesso posto. HostingEnvironment.MapPath elimina l'uomo medio. –

+1

+1 questo ha risolto un progetto open source che stava funzionando per me, quindi ho appena smesso di inizializzare a causa di HttpContext.Current.Server che si attiva per non avere un contesto per qualche motivo. Passando a questo rimettilo in navigazione. –

-3

Si potrebbe provare HttpContext.Current.Server.MapPath ("/") - Ecco come ho fatto riferimento in precedenza nelle classi.

+2

Puoi fare riferimento in questo modo in classi che HANNO un HttpContext, ma non penso che global.asax ne abbia uno, da qui il messaggio di errore che ho ricevuto. –

1

Quando nel Global.asax, utilizzare il contesto oggetto:

context.Server.mappath()

Context consente di accedere anche la raccolta della sessione, l'oggetto di richiesta, l'oggetto risposta . Molto utile quando si desidera registrare errori, ad esempio

+0

Non esiste un 'Context' garantito in Global.asax. –

3

Utilizzare AppDomain.CurrentDomain.BaseDirectory perché Context potrebbe restituire null !!

Problemi correlati