Magician Magician - 3 months ago 48
C# Question

Get wwwroot folder path from ASP.NET 5 controller VS 2015

Sorry for a noob question, but it seems I can't get Server.MapPath from Controller. I need to output json file list from images folder at wwwroot. They are is at wwwroot/images. How can I get a reliable wwwroot path?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNet.Mvc;
using www.Classes;
using System.Web;

namespace www.Controllers
{
[Route("api/[controller]")]
public class ProductsController : Controller
{
[HttpGet]
public IEnumerable<string> Get()
{
FolderScanner scanner = new FolderScanner(Server.MapPath("/"));
return scanner.scan();
}
}
}


Server.MapPath seems not available from System.Web namespace.

Project is using ASP.NET 5 and dotNET 4.6 Framework

Answer

You will need to inject IHostingEnvironment into your class to have access to the ApplicationBasePath property value: Read about Dependency Injection. After successfully injecting the dependency, the wwwroot path should be available to you. For example:

private readonly IHostingEnvironment_appEnvironment;

public ProductsController(IHostingEnvironment appEnvironment)
{
   _appEnvironment = appEnvironment;
}

Usage:

 [HttpGet]
 public IEnumerable<string> Get()
 {
    FolderScanner scanner = new FolderScanner(_appEnvironment.ApplicationBasePath);
    return scanner.scan();
 }