web-dev-qa-db-fra.com

Quel est l'équivalent de Server.MapPath dans ASP.NET Core?

J'ai cette ligne dans un code que je veux copier dans mon contrôleur, mais le compilateur se plaint que

Le nom 'Serveur' n'existe pas dans le contexte actuel

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

Comment puis-je obtenir l'équivalent dans ASP.NET Core?

21
ProfK

Dans Asp.NET Core, l’environnement d’hébergement a été résumé à l’aide de l’interface, IHostingEnvironment

La propriété ContentRootPath vous donnera accès au chemin absolu des fichiers de contenu de l'application.

Vous pouvez également utiliser la propriété WebRootPath si vous souhaitez accéder au chemin racine du serveur Web (dossier www par défaut).

Vous pouvez injecter cette dépendance dans votre contrôleur et y accéder comme suit:

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);
        }
    }

[~ # ~] met à jour [~ # ~]

IHostingEnvironment a été marqué comme obsolète avec .NET Core 3.0, comme indiqué par @ amir1 . Veuillez utiliser IWebHostEnvironment comme indiqué ci-dessous si le cadre cible est .NET Core 3.0:

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

Merci à @ashin pour sa réponse mais IHostingEnvironment est obsolète dans .Net Core 3 !!

selon this :

Types obsolètes (avertissement):

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

Nouveaux types:

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

Vous devez donc utiliser IWebHostEnvironment au lieu de IHostingEnvironment.

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