Solución:
Sería más limpio inyectar un IHostingEnvironment
y luego use su WebRootPath
o WebRootFileProvider
propiedades.
Por ejemplo en un controlador:
private readonly IHostingEnvironment env;
public HomeController(IHostingEnvironment env)
{
this.env = env;
}
public IActionResult About(Guid foo)
{
var path = env.WebRootFileProvider.GetFileInfo("images/foo.png")?.PhysicalPath
}
En una vista que normalmente desea utilizar Url.Content("images/foo.png")
para obtener la URL de ese archivo en particular. Sin embargo, si necesita acceder a la ruta física por algún motivo, puede seguir el mismo enfoque:
@inject Microsoft.AspNetCore.Hosting.IHostingEnvironment env
@{
var path = env.WebRootFileProvider.GetFileInfo("images/foo.png")?.PhysicalPath
}
Sobre la base de la respuesta de Daniel, pero específicamente para ASP.Net Core 2.2:
Use la inyección de dependencia en su controlador:
[Route("api/[controller]")]
public class GalleryController : Controller
{
private readonly IHostingEnvironment _hostingEnvironment;
public GalleryController(IHostingEnvironment hostingEnvironment)
{
_hostingEnvironment = hostingEnvironment;
}
// GET api/<controller>/5
[HttpGet("{id}")]
public IActionResult Get(int id)
{
var path = Path.Combine(_hostingEnvironment.WebRootPath, "images", $"{id}.jpg");
var imageFileStream = System.IO.File.OpenRead(path);
return File(imageFileStream, "image/jpeg");
}
}
Se inyecta una instancia concreta de IHostingEnvironment en su controlador y puede usarla para acceder a WebRootPath (wwwroot).
FYI Solo una actualización de esto. En ASP.NET Core 3 y Net 5 es lo siguiente:
private readonly IWebHostEnvironment _env;
public HomeController(IWebHostEnvironment env)
{
_env = env;
}
public IActionResult About()
{
var path = _env.WebRootPath;
}
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)