2015-01-22 4 views
9

Ich weiß, dass ich WebRoot von HostingEnvironment (Microsoft.AspNet.Hosting Namespace) abrufen kann.Wie wird der virtuelle Pfad dem physischen Pfad zugeordnet?

Ich brauche einen physischen Pfad nach einem virtuellen Pfad in IIS innerhalb meiner Webanwendung erstellt. In IIS verweist der Websitewurzel auf wwwroot meiner veröffentlichten Website, und es gibt ein virtuelles Verzeichnis, das in II hinzugefügt wird, das auf einen Ordner außerhalb meines Wwwroot verweist. Ich hoffe, ich kann den physischen Pfad dieses virtuellen Verzeichnisses bekommen. In MVC 5 oder früheren Version kann ich HostingEnvironment.MapPath (System.Web-Namespace) oder Server.MapPath verwenden, was soll ich in MVC 6 tun?

EDIT:

Es ist nicht der virtuelle Pfad aber das virtuelle Verzeichnis in IIS hinzugefügt. Ich hoffe, ich kann den physischen Pfad dieses virtuellen Verzeichnisses abrufen. Ich denke, das virtuelle Verzeichnis ist eine besondere Eigenschaft von IIS, die wie ein Unterpfad eines vollständigen virtuellen Pfades aussieht, aber auch ein Ordner außerhalb des physischen Web-Stammordners sein kann.

4. Oktober 2015

Siehe this issue in ASP.NET 5 Hosting repo, Bisher scheint es nicht, wir den physischen Pfad eines virtuellen Verzeichnisses in IIS erhalten können.

Antwort

7

Sie IApplicationEnvironment dafür verwenden können, die die Eigenschaft enthält ApplicationBasePath

private readonly IApplicationEnvironment _appEnvironment; 

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

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

Ich glaube nicht, dass ich auf diese Weise ein virtuelles Verzeichnis in IIS definiert bekommen kann. ApplicationBasePath gibt den Root-Pfad von meinem 'wwwroot' an, aber das virtuelle Verzeichnis kann vollständig ein anderer Pfad außerhalb meines wwwroot sein, obwohl die virtuelle Verzeichnis-URL selbst wie ein Unterordner meiner Website aussieht. – Ricky

+1

'ApplicationEnvironment.ApplicationBasePath' ist genau die physische Domäne Ihres Anwendungsstammverzeichnisses (nicht wwwroot von IIS). Es ist ein Verzeichnis mit dem Projekt.json der App. 'IHostingEnvironment.WebRoot' ist ein Unterverzeichnis von ApplicationBasePath für Ihr Webroot - es ist ein Verzeichnis, das in der project.json der App als' Webroot' angegeben ist. Für ein Beispiel ist dies ein Verzeichnis, von dem StaticFilesMiddleware Dateien aus bereitstellt. – Shrike

6

auf Azure Web Apps, finden Sie die wwwroot an einem anderen Ort ist:

Alle Quellcode bekommt kopiert nach D:/Home/site/approot/src/{WebsiteName} mit Ausnahme der wwwroot. IApplicationEnvironment.ApplicationBasePath Punkte hier.

Die wwwroot geht in D:/Home/site/wwwroot. IHostingEnvironment.WebRootPath Punkte hier.

Es funktioniert immer noch nicht mit virtuellen IIS-Verzeichnissen. Es gibt eine WebRootFileProvider Eigenschaft auf der IHostingEnvironment Schnittstelle, die eine IFileProvider mit Methoden wie GetFileInfo(string subpath) bereitstellt. Ich lese die code und fand subpath ist eine physikalische, keine virtuelle.

Offensichtlich gibt es in einem selbst gehosteten Setup keinen IIS. Wenn Sie auf IIS angewiesen sind und dies wirklich tun müssen, müssen Sie wahrscheinlich auf System.Web verweisen.

HTH.