2015-01-22 27 views
9

So che posso ottenere WebRoot da HostingEnvironment (spazio dei nomi Microsoft.AspNet.Hosting).Come mappare il percorso virtuale sul percorso fisico?

Ho bisogno di ottenere un percorso fisico in base a un percorso virtuale creato in IIS all'interno della mia applicazione web. In IIS, la radice del sito Web punta a wwwroot del mio sito pubblicato e vi è una directory virtuale aggiunta in IIS che punta a una cartella esterna al mio wwwroot. Spero di poter ottenere il percorso fisico di quella directory virtuale . In MVC 5 o versione precedente, posso utilizzare HostingEnvironment.MapPath (spazio dei nomi System.Web) o Server.MapPath, cosa devo fare in MVC 6?

EDIT:

Non è il percorso virtuale, ma la directory virtuale aggiunto in IIS. Spero di poter ottenere il percorso fisico di quella directory virtuale. Penso che la directory virtuale sia una caratteristica particolare di IIS, che assomiglia a un percorso secondario di un percorso virtuale completo ma può essere una cartella al di fuori della cartella radice Web fisica.

4 ottobre 2015

Fare riferimento alla this issue in ASP.NET 5 Hosting repo, finora, non sembra che possiamo ottenere il percorso fisico di una directory virtuale in IIS.

risposta

7

È possibile utilizzare IApplicationEnvironment per questo, che contiene la proprietà ApplicationBasePath

private readonly IApplicationEnvironment _appEnvironment; 

    public HomeController(IApplicationEnvironment appEnvironment) 
    { 
     _appEnvironment = appEnvironment; 
    } 

    public IActionResult Index() 
    { 
     var rootPath = _appEnvironment.ApplicationBasePath; 
     return View(); 
    } 
+0

Non penso di poter ottenere una directory virtuale definita in IIS in questo modo. ApplicationBasePath indica il percorso root del mio 'wwwroot', ma la directory virtuale può essere completamente diversa dal mio wwwroot sebbene l'url della directory virtuale assomigli a una sottocartella del mio sito web. – Ricky

+1

'IApplicationEnvironment.ApplicationBasePath' è esattamente la direzione fisica della root dell'applicazione (non wwwroot di IIS). È una directory con project.json dell'app. 'IHostingEnvironment.WebRoot' è una sottodirectory di ApplicationBasePath per il webroot - è una directory specificata nell'app project.json come' webroot'. Per un esempio è una directory da cui StaticFilesMiddleware serve i file. – Shrike

6

su Azure Web Apps, troverete il wwwroot è in un posto diverso:

Tutto il codice sorgente ottiene copiato in D:/Home/site/approot/src/{WebsiteName} eccetto lo wwwroot. IApplicationEnvironment.ApplicationBasePath punti qui.

Il wwwroot va in D:/Home/site/wwwroot. IHostingEnvironment.WebRootPath punti qui.

Non funzionerà ancora con le directory virtuali IIS. C'è una proprietà WebRootFileProvider nell'interfaccia IHostingEnvironment che fornisce un IFileProvider con metodi come GetFileInfo(string subpath). Ho letto il code e trovato subpath è un fisico, non uno virtuale.

Ovviamente, in una configurazione self-hosted, non esiste IIS. Se ti affidi a IIS e devi farlo davvero, probabilmente dovrai fare riferimento a System.Web.

HTH.

Problemi correlati