web-dev-qa-db-de.com

Was entspricht Server.MapPath in ASP.NET Core?

Ich habe diese Zeile in einem Code, den ich in meinen Controller kopieren möchte, aber der Compiler beschwert sich darüber

Der Name 'Server' existiert im aktuellen Kontext nicht

var UploadPath = Server.MapPath("~/App_Data/uploads")

Wie kann ich das Äquivalent in ASP.NET Core erreichen?

21
ProfK

In Asp.NET Core wurde die Hostumgebung über die Schnittstelle IHostingEnvironment abstrahiert

Mit der Eigenschaft ContentRootPath erhalten Sie Zugriff auf den absoluten Pfad zu den Anwendungsinhaltsdateien.

Sie können auch die Eigenschaft WebRootPath verwenden, wenn Sie auf den webfähigen Stammpfad zugreifen möchten (standardmäßig der Ordner www).

Sie können diese Abhängigkeit in Ihren Controller einfügen und wie folgt darauf zugreifen:

public class HomeController : Controller
    {
        private readonly IHostingEnvironment _hostingEnvironment;

        public HomeController(IHostingEnvironment hostingEnvironment)
        {
            _hostingEnvironment = hostingEnvironment;
        }

        public ActionResult Index()
        {
            string webRootPath = _hostingEnvironment.WebRootPath;
            string contentRootPath = _hostingEnvironment.ContentRootPath;

            return Content(webRootPath + "\n" + contentRootPath);
        }
    }

[~ # ~] Update [~ # ~]

IHostingEnvironment wurde mit .NET Core 3.0 als veraltet markiert, wie von @ amir1 hervorgehoben. Verwenden Sie IWebHostEnvironment wie unten gezeigt, wenn das Zielframework .NET Core 3.0 ist:

public class HomeController : Controller
    {
        private readonly IWebHostEnvironment _hostingEnvironment;

        public HomeController(IWebHostEnvironment hostingEnvironment)
        {
            _hostingEnvironment = hostingEnvironment;
        }

        public ActionResult Index()
        {
            string webRootPath = _hostingEnvironment.WebRootPath;
            string contentRootPath = _hostingEnvironment.ContentRootPath;

            return Content(webRootPath + "\n" + contentRootPath);
        }
    }
33
ashin

Vielen Dank an @ashin für seine Antwort, aber IHostingEnvironment ist in .Net Core 3 veraltet !!

gemäß this :

Veraltete Typen (Warnung):

Microsoft.Extensions.Hosting.IHostingEnvironment
Microsoft.AspNetCore.Hosting.IHostingEnvironment
Microsoft.Extensions.Hosting.IApplicationLifetime
Microsoft.AspNetCore.Hosting.IApplicationLifetime
Microsoft.Extensions.Hosting.EnvironmentName
Microsoft.AspNetCore.Hosting.EnvironmentName

Neue Typen:

Microsoft.Extensions.Hosting.IHostEnvironment
Microsoft.AspNetCore.Hosting.IWebHostEnvironment : IHostEnvironment
Microsoft.Extensions.Hosting.IHostApplicationLifetime
Microsoft.Extensions.Hosting.Environments 

Sie müssen also IWebHostEnvironment anstelle von IHostingEnvironment verwenden.

public class HomeController : Controller
{
    private readonly IWebHostEnvironment _webHostEnvironment;

    public HomeController(IWebHostEnvironment webHostEnvironment)
    {
        _webHostEnvironment= webHostEnvironment;
    }

    public IActionResult Index()
    {
        string webRootPath = _webHostEnvironment.WebRootPath;
        string contentRootPath = _webHostEnvironment.ContentRootPath;

        return Content(webRootPath + "\n" + contentRootPath);
    }
}
3
amir133