서버와 동등한 것은 무엇입니까?ASP.NET Core의 MapPath?
컨트롤러에 복사하고 싶은 코드에 이 줄이 있는데 컴파일러가 다음과 같이 불평합니다.
'서버' 이름이 현재 컨텍스트에 없습니다.
var UploadPath = Server.MapPath("~/App_Data/uploads")
ASP.NET Core에서 동등한 성능을 발휘하려면 어떻게 해야 합니까?
.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 코어 2
예를 들어 찾고자 하는 경우~/wwwroot/CSS
public class YourController : Controller
{
private readonly IHostingEnvironment _HostEnvironment; //diference 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
.
업데이트: IHosting Environment는 더 이상 사용되지 않습니다.아래 업데이트를 참조하십시오.
As.NET Core 2.2 이하에서는 IHosting Environment라는 인터페이스를 사용하여 호스팅 환경을 추상화했습니다.
ContentRootPath 속성을 사용하면 응용 프로그램 컨텐츠 파일에 대한 절대 경로에 액세스할 수 있습니다.
웹 서비스 가능 루트 경로(기본적으로 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 이상
IHosting Environment는 @amir133에서 지적한 대로 .NET Core 3.0에서 사용되지 않는 것으로 표시되었습니다.IHosting Environment 대신 IWebHostEnvironment를 사용해야 합니다.아래의 답변을 참고하시기 바랍니다.
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; }
}
}
승인된 답변의 제안은 대부분의 시나리오에서 충분하지만 - 종속성 주입에 의존하기 때문에 - 컨트롤러 및 보기로 제한됩니다: 적절한 답변을 얻으려면Server.MapPath
비싱글톤 도우미 클래스에서 액세스할 수 있는 대체품 우리는 다음 코드 줄을 끝에 추가할 수 있습니다.Configure()
앱의 방법Startup.cs
파일:
// setup app's root folders
AppDomain.CurrentDomain.SetData("ContentRootPath", env.ContentRootPath);
AppDomain.CurrentDomain.SetData("WebRootPath", env.WebRootPath);
이렇게 하면 다음과 같은 방법으로 모든 클래스(컨트롤러 및 보기를 포함하지만 이에 제한되지 않음)에서 검색할 수 있습니다.
var contentRootPath = (string)AppDomain.CurrentDomain.GetData("ContentRootPath");
var webRootPath = (string)AppDomain.CurrentDomain.GetData("WebRootPath");
이를 통해 기존 모델과 동일한 기능을 사용할 수 있는 정적 도우미 방법을 개발할 수 있습니다.Server.MapPath
:
public static class MyServer
{
public static string MapPath(string path)
{
return Path.Combine(
(string)AppDomain.CurrentDomain.GetData("ContentRootPath"),
path);
}
}
다음과 같은 방법으로 사용할 수 있습니다.
var docPath = MyServer.MapPath("App_Data/docs");
이 접근 방식과 약간의 배경에 대한 추가 정보를 보려면 제 블로그에 있는 이 게시물을 보십시오.
예:var fullPath = Path.Combine(Directory.GetCurrentDirectory(), "appsettings.json");
언급URL : https://stackoverflow.com/questions/49398965/what-is-the-equivalent-of-server-mappath-in-asp-net-core
'programing' 카테고리의 다른 글
C++용 NumPy 스타일 어레이? (0) | 2023.05.21 |
---|---|
Flask에서 POST 개체를 mongodb에 적합한 표현으로 변환합니다. (0) | 2023.05.21 |
Azure AD App 애플리케이션 권한 대 위임된 권한 (0) | 2023.05.21 |
안전 영역 레이아웃을 프로그래밍 방식으로 사용하는 방법은 무엇입니까? (0) | 2023.05.21 |
MySQL: DISTINCT / UNIQUENT를 선택하지만 모든 열을 반환하시겠습니까? (0) | 2023.05.21 |