Solución:
Necesitarás inyectar IHostingEnvironment
en tu clase para tener acceso a la ApplicationBasePath
valor de la propiedad: Lea acerca de la inyección de dependencia. Después de inyectar con éxito la dependencia, el wwwroot path debe estar disponible para usted. Por ejemplo:
private readonly IHostingEnvironment _appEnvironment;
public ProductsController(IHostingEnvironment appEnvironment)
{
_appEnvironment = appEnvironment;
}
Uso:
[HttpGet]
public IEnumerable<string> Get()
{
FolderScanner scanner = new FolderScanner(_appEnvironment.ApplicationBasePath);
return scanner.scan();
}
Sé que esto ya ha sido respondido, pero me ha dado diferentes resultados dependiendo de mi entorno de alojamiento (IIS Express vs IIS). El siguiente enfoque parece funcionar muy bien para todos los entornos de alojamiento si desea obtener su ruta wwwroot (consulte este problema de GitHub).
Por ejemplo
private readonly IHostingEnvironment _hostEnvironment;
public ProductsController(IHostingEnvironment hostEnvironment)
{
_hostEnvironment = hostEnvironment;
}
[HttpGet]
public IEnumerable<string> Get()
{
FolderScanner scanner = new FolderScanner(_hostEnvironment.WebRootPath);
return scanner.scan();
}
Para aquellos que implementan en Azure y tienen este error. Lo que hice fue una solución alternativa, no he intentado averiguar por qué el entorno de Azure es diferente al IIS local. Aquí está mi trabajo:
if (string.IsNullOrWhiteSpace(_environment.WebRootPath))
{
_environment.WebRootPath = System.IO.Path.Combine(Directory.GetCurrentDirectory(), "wwwroot");
}
Por supuesto que necesitará:
private IHostingEnvironment _environment;
public OnboardingController(IHostingEnvironment environment)
{
_environment = environment;
}