1. ホーム
  2. asp.net

[解決済み] ASP.NET CoreのServer.MapPathに相当するものは何ですか?

2023-02-18 14:22:07

質問

コントローラにコピーしたいコードに次のような行がありますが、コンパイラは次のような文句を言います。

名前 'Server' は現在のコンテキストに存在しません。

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

ASP.NET Coreで同等のことを実現するにはどうしたらよいでしょうか。

どのように解決するのですか?

UPDATE: IHostingEnvironmentは非推奨です。以下のアップデートを参照してください。

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

この ContentRootPath プロパティは、アプリケーション・コンテンツ・ファイルの絶対パスへのアクセスを提供します。

プロパティを使用することもできます。 WebRootPath というプロパティも使用できます。これは、ウェブサーバのルートパス (デフォルトでは www フォルダ) にアクセスしたい場合に使用します。

この依存関係をコントローラに注入し、以下のようにアクセスすることができます。

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 - .NET CORE 3.0 およびそれ以上

IHostingEnvironmentは、@で指摘されたように、.NET Core 3.0で廃止されました。 amir133 . 使用するのは 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; }
  }
}