web-dev-qa-db-ja.com

ASP.NET CoreのServer.MapPathに相当するものは何ですか?

私は自分のコントローラーにコピーしたいコードにこの行がありますが、コンパイラーは文句を言います

「サーバー」という名前は現在のコンテキストに存在しません

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

ASP.NET Coreで同等の機能を実現するにはどうすればよいですか?

21
ProfK

Asp.NET Coreでは、ホスティング環境はインターフェイス IHostingEnvironment を使用して抽象化されています

ContentRootPath プロパティにより、アプリケーションコンテンツファイルへの絶対パスにアクセスできます。

Webで使用可能なルートパス(デフォルトでは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);
        }
    }

UPDATE

IHostingEnvironmentは、@ amir1 で指摘されているように、.NET Core 3.0では廃止されたとマークされています。ターゲットフレームワークが.NET Core 3.0の場合、以下に示すようにIWebHostEnvironmentを使用してください。

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

@ashinの回答に感謝しますが、IHostingEnvironmentは.Net core 3ではobsoletedです!!

this に従って:

廃止されたタイプ(警告):

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

新しいタイプ:

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

したがって、IHostingEnvironmentの代わりにIWebHostEnvironmentを使用する必要があります。

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