Search code examples
c#asp.netrestasp.net-coreasp.net-core-mvc

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


Solution

  • 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.