2017-05-16 14 views
8

Jak uzyskać bezwzględną ścieżkę w ASP netto podstawowej alternatywny sposób na Server.MapPathJak uzyskać bezwzględną ścieżkę w ASP netto podstawowej alternatywny sposób na Server.MapPath

Próbowałem użyć IHostingEnvironment ale to nie robi dać właściwy wynik.

Mam jeden plik obrazu (Sample.PNG) w folderze wwwroot potrzebuję uzyskać tę absolutną ścieżkę.

+0

wstrzyknąć go jako zależność do klasy zależnej. struktura zapełni to za Ciebie. – Nkosi

Odpowiedz

18

Wstrzyknięcie IHostingEnvironment jako zależność w klasie zależnej. Ramy te wypełnić go dla Ciebie

public class HomeController : Controller { 
    private IHostingEnvironment _hostingEnvironment; 

    public HomeController(IHostingEnvironment environment) { 
     _hostingEnvironment = environment; 
    } 

    [HttpGet] 
    public IActionResult Get() { 
     var path = Path.Combine(_hostingEnvironment.WebRootPath, "Sample.PNG"); 
     return View(); 
    } 
} 

Można pójść o krok dalej i stworzyć Twoją własnością dostawcy ścieżki

public interface IPathProvider { 
    string MapPath(string path); 
} 

public class PathProvider : IPathProvider { 
    private IHostingEnvironment _hostingEnvironment; 

    public PathProvider(IHostingEnvironment environment) { 
     _hostingEnvironment = environment; 
    } 

    public string MapPath(string path) { 
     var filePath = Path.Combine(_hostingEnvironment.WebRootPath, path); 
     return filePath; 
    } 
} 

i wstrzyknąć IPathProvider w klasach zależnych.

public class HomeController : Controller { 
    private IPathProvider pathProvider; 

    public HomeController(IPathProvider pathProvider) { 
     this.pathProvider = pathProvider; 
    } 

    [HttpGet] 
    public IActionResult Get() { 
     var path = pathProvider.MapPath("Sample.PNG"); 
     return View(); 
    } 
} 

Upewnij się zarejestrować usługę z pojemnika

services.AddSingleton<IPathProvider, PathProvider>(); 
+1

Geniusz! Właśnie uratowałeś mi godziny pracy. – War10ck

Powiązane problemy