ASP .NET
Core - Usando WebRootPath para obter o caminho absoluto
![]() |
Hoje veremos como obter o caminho absoluto usando a propriedade WebRootPath. |
A propriedade WebRootPath fornece o caminho da pasta wwwroot do projeto. Você pode usar essa propriedade dentro de um Controller para obter o caminho absoluto dos arquivos mantidos na pasta de conteúdo estático.
Para fazer isso, você só tinha que definir o namespace Microsoft.AspNetCore.Hosting e incluir uma instância de IHostingEnvironment como parâmetro para o construtor do Controller.
O recurso Injeção de Dependência do ASP.NET Core MVC vai injetar o serviço de IHostingEnvironment ao construtor. Em seguida, você pode usar a propriedade WebRootPath para encontrar o caminho absoluto, como mostrado no código abaixo.
public class HomeController : Controller
{
private IHostingEnvironment hostingEnvironment;
public HomeController(IHostingEnvironment environment)
{
hostingEnvironment = environment;
}
public ActionResult Index()
{
string absolutePath = Path.Combine(hostingEnvironment.WebRootPath, "Arquivo1.jpg");
return View();
}
}
|
Mas se você estiver usando a ASP .NET Core 3.1 vai obter a seguinte mensagem de alerta:
A mensagem avisa que IHostingEnvironment esta obsoleto e que você tem que usar o IWebHostEnvironment.
Sem problemas, basta então incluir o namespace Microsoft.AspNetCore.Hosting e injetar a instãncia de IWebHostEnvironment.
Abaixo temos um exemplo onde obtemos o caminho absoluto de wwwroot e a seguir montamos um caminho que contém a pasta videos onde a seguir obtemos todos os arquivos com extensão .mp4 :
public class HomeController : Controller
{
private readonly IWebHostEnvironment _appEnvironment;
public HomeController(IWebHostEnvironment env)
{
_appEnvironment = env;
}
public IActionResult Video()
{
string pasta = "videos";
string caminho_WebRoot = _appEnvironment.WebRootPath;
string caminhoVideos = Path.Combine(caminho_WebRoot, pasta);
string[] arquivosVideos = Directory.GetFiles(caminhoVideos, "*.mp4")
.Select(Path.GetFileName)
.ToArray();
List<string> listaVideos = new List<string>(arquivosVideos);
var videoVM = new VideoViewModel();
videoVM.Videos = new SelectList(listaVideos);
return View(videoVM);
}
|
Se levarmos em conta que a interface IHostingEnvironment é uma das interfaces mais irritantes do .NET Core 2.x, porque existe em dois namespaces diferentes, Microsoft.AspNetCore.Hosting e Microsoft.Extensions.Hosting sendo que estes são ligeiramente diferentes e são incompatíveis, o ajuste é bem-vindo.
Além a interface IWebHostEnvironment também foi introduzida a interface IHostEnvironment que estão em espaços para nome separados, têm nomes diferentes e um herda do outro!
Veja a hierarquia:
namespace Microsoft.Extensions.Hosting
{
public interface IHostEnvironment
{
string EnvironmentName { get; set; }
string ApplicationName { get; set; }
string ContentRootPath { get; set; }
IFileProvider ContentRootFileProvider { get; set; }
}
}
namespace Microsoft.AspNetCore.Hosting
{
public interface IWebHostEnvironment : IHostEnvironment
{
string WebRootPath { get; set; }
IFileProvider WebRootFileProvider { get; set; }
}
}
|
Assim (IHostEnvironment) agora também funcionará com a versão da web (IWebHostEnvironment), e, debaixo dos panos, as implementações do IHostEnvironment e IWebHostEnvironment ainda são as mesmas - elas apenas implementam as novas interfaces, além das antigas.
"Se
alguém ouvir as minhas palavras e não as guardar, eu não o julgo; porque eu não
vim para julgar o mundo, e sim para salvá-lo.
Quem me rejeita e não recebe as minhas palavras tem quem o julgue; a própria
palavra que tenho proferido, essa o julgará no último dia."
João 12:47,48
Referências:
ASP .NET Core - Implementando a segurança com ... - Macoratti
ASP.NET Core MVC - Criando um Dashboard ... - Macoratti.net
C# - Gerando QRCode - Macoratti
ASP .NET - Gerando QRCode com a API do Google