it-swarm.com.de

Erhalten Sie den Ordnerpfad "wwwroot" von ASP.NET 5-Controller VS 2015

Sorry für eine Noob-Frage, aber es scheint, dass ich Server.MapPath nicht von Controller erhalten kann. Ich muss die Json-Dateiliste aus dem Bilderordner unter wwwroot ausgeben. Sie befinden sich bei wwwroot/images. Wie bekomme ich einen zuverlässigen Wwwroot-Pfad?

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 scheint im System.Web-Namespace nicht verfügbar zu sein.

Project verwendet ASP.NET 5 und dotNET 4.6 Framework

14
Magician

Sie müssen IHostingEnvironment in Ihre Klasse einfügen, um Zugriff auf den Eigenschaftswert ApplicationBasePath zu erhalten: Lesen Sie ungefähr Dependency Injection . Nach dem erfolgreichen Injizieren der Abhängigkeit sollte der wwwroot-Pfad für Sie verfügbar sein. Zum Beispiel:

private readonly IHostingEnvironment _appEnvironment;

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

Verwendungszweck:

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

Ich weiß, dass dies bereits beantwortet wurde, aber es hat mir unterschiedliche Ergebnisse geliefert, abhängig von meiner Hosting-Umgebung (IIS Express vs. IIS). Der folgende Ansatz scheint für alle Hosting-Umgebungen gut zu funktionieren, wenn Sie Ihren wwwroot-Pfad erhalten möchten ( siehe dieses GitHub-Problem ).

Zum Beispiel

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

Für diejenigen, die sich bei Azure anmelden und in diesen Fehler geraten. Was ich getan habe, war eine Arbeit für mich, ich habe nicht versucht herauszufinden, warum sich die Umgebung von Azure von lokalem IIS unterscheidet ..__ Hier ist meine Arbeit:

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

Natürlich benötigen Sie:

private IHostingEnvironment _environment;

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