コントローラーにコピーしたいコードにこの行があるのですが、コンパイラーが次のようにエラーを出します。
「Server」という名前は現在のコンテキストに存在しません
var UploadPath = Server.MapPath("~/App_Data/uploads")
ASP.NET Core で同等の機能を実現するにはどうすればよいでしょうか?
ベストアンサー1
.NET 6 (.NET Core 3 以上)
例えば、~/wwwroot/CSS
public class YourController : Controller
{
private readonly IWebHostEnvironment _webHostEnvironment;
public YourController (IWebHostEnvironment webHostEnvironment)
{
_webHostEnvironment= webHostEnvironment;
}
public IActionResult Index()
{
string webRootPath = _webHostEnvironment.WebRootPath;
string contentRootPath = _webHostEnvironment.ContentRootPath;
string path ="";
path = Path.Combine(webRootPath , "CSS");
//or path = Path.Combine(contentRootPath , "wwwroot" ,"CSS" );
return View();
}
}
いくつかのトリック
また、コントローラーやサービスがない場合は、最後のパートに従って、そのクラスをシングルトンとして登録します。次に、次の操作を行いますStartup.ConfigureServices
。
services.AddSingleton<your_class_Name>();
最後に、your_class_Name
必要な場所に注入します。
.NET Core 2
例えば、~/wwwroot/CSS
public class YourController : Controller
{
private readonly IHostingEnvironment _HostEnvironment; //difference is here : IHostingEnvironment vs I*Web*HostEnvironment
public YourController (IHostingEnvironment HostEnvironment)
{
_HostEnvironment= HostEnvironment;
}
public ActionResult Index()
{
string webRootPath = _HostEnvironment.WebRootPath;
string contentRootPath = _HostEnvironment.ContentRootPath;
string path ="";
path = Path.Combine(webRootPath , "CSS");
//or path = Path.Combine(contentRootPath , "wwwroot" ,"CSS" );
return View();
}
}
詳細
@Ashin に感謝しますが、IHostingEnvironment
MVC Core 3 では廃止されています!!
によるとこれ:
廃止されたタイプ (警告):
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
したがって、IWebHostEnvironment
の代わりにを使用する必要がありますIHostingEnvironment
。