web-dev-qa-db-fra.com

Obtenir le chemin du dossier wwwroot à partir du contrôleur ASP.NET 5 VS 2015

Désolé pour une question noob, mais il semble que je ne puisse pas obtenir Server.MapPath depuis Controller. J'ai besoin de sortir la liste de fichiers JSON du dossier images sur wwwroot. Ils sont est à wwwroot/images. Comment puis-je obtenir un chemin wwwroot fiable?

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 ne semble pas disponible à partir de l'espace de noms System.Web.

Le projet utilise ASP.NET 5 et dotNET 4.6 Framework

14
Magician

Vous devrez injecter IHostingEnvironment dans votre classe pour avoir accès à la valeur de la propriété ApplicationBasePath: Lisez à propos de Dependency Injection . Une fois la dépendance injectée, le chemin wwwroot doit être disponible. Par exemple:

private readonly IHostingEnvironment _appEnvironment;

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

Utilisation:

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

Je sais que cela a déjà été répondu, mais cela m'a donné des résultats différents en fonction de mon environnement d'hébergement (IIS Express vs IIS). L'approche suivante semble bien fonctionner pour tous les environnements d'hébergement si vous voulez obtenir votre chemin wwwroot ( voir ce numéro de GitHub ).

Par exemple

private readonly IHostingEnvironment _hostEnvironment;

public ProductsController(IHostingEnvironment hostEnvironment)
{
   _hostEnvironment = hostEnvironment;
}

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

Pour ceux qui se déploient sur Azure et entrent dans cette erreur. Ce que j'ai fait était un travail de contournement, je n'ai pas essayé de comprendre pourquoi l'environnement d'Azure est différent de celui des services IIS locaux . Voici mon travail:

if (string.IsNullOrWhiteSpace(_environment.WebRootPath))
{
   _environment.WebRootPath = System.IO.Path.Combine(Directory.GetCurrentDirectory(), "wwwroot");
}

Bien sûr, vous aurez besoin de:

private IHostingEnvironment _environment;

public OnboardingController(IHostingEnvironment environment)
{
     _environment = environment;
}
0
Hung Cao