Saltar al contenido

Cómo obtener la ruta absoluta en la forma alternativa de ASP.Net Core para Server.MapPath

Solución:

A partir de .Net Core v3.0, debería ser IWebHostEnvironment para acceder al WebRootPath que se ha movido a la interfaz del entorno web específico.

Inyectar IWebHostEnvironment como una dependencia en la clase dependiente. El marco lo poblará por ti

public class HomeController : Controller {
    private IWebHostEnvironment _hostEnvironment;

    public HomeController(IWebHostEnvironment environment) {
        _hostEnvironment = environment;
    }

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

Podría ir un paso más allá y crear su propia abstracción e implementación de servicios de proveedor de ruta.

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

public class PathProvider : IPathProvider {
    private IWebHostEnvironment _hostEnvironment;

    public PathProvider(IWebHostEnvironment environment) {
        _hostEnvironment = environment;
    }

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

E inyectar IPathProvider en clases dependientes.

public class HomeController : Controller {
    private IPathProvider pathProvider;

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

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

Asegúrese de registrar el servicio con el contenedor DI

services.AddSingleton<IPathProvider, PathProvider>();

* Cortar a tajos *
No recomendado, pero para su información, puede obtener una ruta absoluta de una ruta relativa con

var abs = Path.GetFullPath("~/Content/Images/Sample.PNG").Replace("~\","");

Prefiera los enfoques DI / Service anteriores, pero si se encuentra en una situación sin DI (por ejemplo, una clase instanciada con Activator) esto funcionará.

.NET Core 3.0

Var 1:

string path = System.IO.Directory.GetCurrentDirectory();

Var 2:

string path = AppDomain.CurrentDomain.BaseDirectory.Substring(0, AppDomain.CurrentDomain.BaseDirectory.IndexOf("\bin"));
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *