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

asp.netasp.net-coreasp.net-core-mvccrest

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

Best Answer

You will need to inject IWebHostEnvironment 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 IWebHostEnvironment _appEnvironment;

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

Usage:

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

Edit: IHostingEnvironment has been replaced by IWebHostEnvironment in later versions of asp.net.