Asp.net

ASP.NET Core 中的 Server.MapPath 等價物是什麼?

  • March 21, 2018

我在一些要復製到控制器中的程式碼中有這一行,但編譯器抱怨說

目前上下文中不存在名稱“伺服器”

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

如何在 ASP.NET Core 中實現等價物?

更新: IHostingEnvironment 已棄用。請參閱下面的更新。

在 Asp.NET Core 2.2 及更低版本中,託管環境已使用介面IHostingEnvironment進行了抽象

ContentRootPath屬性將使您能夠訪問應用程序內容文件的絕對路徑。

如果您想訪問 web-servable 根路徑(預設為 www 文件夾),您也可以使用屬性WebRootPath

您可以將此依賴項注入您的控制器並按如下方式訪問它:

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

更新 - .NET CORE 3.0 及更高版本

正如@ amir133所指出的,IHostingEnvironment 已被 .NET Core 3.0 標記為過時。您應該使用IWebHostEnvironment而不是IHostingEnvironment。請參閱下面的答案。

Microsoft 在這些介面之間巧妙地分離了主機環境屬性。請參考下面的介面定義:

namespace Microsoft.Extensions.Hosting
{
 public interface IHostEnvironment
 {
   string EnvironmentName { get; set; }
   string ApplicationName { get; set; }
   string ContentRootPath { get; set; }
   IFileProvider ContentRootFileProvider { get; set; }
 }
}

namespace Microsoft.AspNetCore.Hosting
{
 public interface IWebHostEnvironment : IHostEnvironment
 {
   string WebRootPath { get; set; }
   IFileProvider WebRootFileProvider { get; set; }
 }
}

引用自:https://stackoverflow.com/questions/49398965