ASP.NET MVC - 컨트롤러에서 App_Data 폴더의 절대 경로 찾기
ASP의 컨트롤러에서 App_Data 폴더의 절대 경로를 찾는 올바른 방법은 무엇입니까?NET MVC 프로젝트?.xml 파일을 임시로 사용할 수 있고 경로를 하드코드하지 않습니다.
이것은 작동하지 않습니다.
[HandleError]
public class HomeController : Controller
{
public ActionResult Index()
{
string path = VirtualPathUtility.ToAbsolute("~/App_Data/somedata.xml");
//.... do whatever
return View();
}
}
저는 웹 컨텍스트 밖에서 VirtualPath Utility를 생각합니다.ToAbsolute()가 작동하지 않습니다. 문자열 경로가 "C:"로 반환됩니다.\App_Data\somedata.xml"
MVC app?global.asax에서 .xml 파일의 경로를 결정하고 응용 프로그램 수준 변수를 어디에 붙여야 합니까?
ASP.NET MVC1 -> MVC3
string path = HttpContext.Current.Server.MapPath("~/App_Data/somedata.xml");
ASP.NET MVC4
string path = Server.MapPath("~/App_Data/somedata.xml");
MSDN Reference:
HttpServerUtility입니다.MapPath 메서드
string path = AppDomain.CurrentDomain.GetData("DataDirectory").ToString();
이것은 아마도 그것을 얻는 더 "정확한" 방법일 것입니다.
나는 사용하는 습관을 들이려고 노력합니다.HostingEnvironment
대신에Server
WCF 서비스의 맥락 안에서도 작동하기 때문입니다.
HostingEnvironment.MapPath(@"~/App_Data/PriceModels.xml");
가장 올바른 방법은 사용하는 것입니다.HttpContext.Current.Server.MapPath("~/App_Data");
즉, 경로를 검색할 수 있는 방법은 다음과 같습니다.HttpContext
사용할 수 있습니다.App_Data 디렉토리는 웹 프로젝트 폴더 구조[1]입니다.
액세스 권한이 없는 클래스의 ~/App_Data 경로가 필요한 경우HttpContext
언제든지 IoC 컨테이너를 사용하여 공급자 인터페이스를 주입할 수 있습니다.
public interface IAppDataPathProvider
{
string GetAppDataPath();
}
다음을 사용하여 구현HttpApplication
:
public class AppDataPathProvider : IAppDataPathProvider
{
public string GetAppDataPath()
{
return MyHttpApplication.GetAppDataPath();
}
}
어디에MyHttpApplication.GetAppDataPath
다음과 같은 모양:
public class MyHttpApplication : HttpApplication
{
// of course you can fetch&store the value at Application_Start
public static string GetAppDataPath()
{
return HttpContext.Current.Server.MapPath("~/App_Data");
}
}
[1] http://msdn.microsoft.com/en-us/library/ex526337%28v=vs.100%29.aspx
Phil Haak은 미친 "\" 스타일의 디렉토리 구분자가 있는 경로를 처리할 때 조금 더 안정적이라고 생각하는 예를 가지고 있습니다.또한 경로 연결을 안전하게 처리합니다.시스템에서 무료로 제공됩니다.IO
var fileName = Path.GetFileName(file.FileName);
var path = Path.Combine(Server.MapPath("~/App_Data/uploads"), fileName);
그러나 "AppDomain"을 사용해 볼 수도 있습니다.현재 도메인.서버 대신 BaseDirector를 입력합니다.MapPath".
string filePath = HttpContext.Current.Server.MapPath("~/folderName/filename.extension");
OR
string filePath = HttpContext.Server.MapPath("~/folderName/filename.extension");
이 방법으로 저는 호스트 경로를 얻었습니다.
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
namespace IHostingEnvironmentExample.Controllers
{
public class HomeController : Controller
{
private IHostingEnvironment _env;
public HomeController(IHostingEnvironment env)
{
_env = env;
}
public IActionResult Index()
{
var webRoot = _env.WebRootPath;
var file = System.IO.Path.Combine(webRoot, "test.txt");
System.IO.File.WriteAllText(file, "Hello World!");
return View();
}
}
}
https://forums.asp.net/t/1696005.aspx?How+to+get+Local+Server+path+in+mvc
string Index = i;
string FileName = "Mutton" + Index + ".xml";
XmlDocument xmlDoc = new XmlDocument();
var path = Path.Combine(Server.MapPath("~/Content/FilesXML"), FileName);
xmlDoc.Load(path); // Can use xmlDoc.LoadXml(YourString);
이것은 현재 정확히 필요한 경로를 확보하기 위한 최고의 솔루션입니다.
언급URL : https://stackoverflow.com/questions/1268738/asp-net-mvc-find-absolute-path-to-the-app-data-folder-from-controller
'programing' 카테고리의 다른 글
MongoDB Atlas mongo 가져오기 문제로 인해 어레이를 D로 디코딩할 수 없습니다. (0) | 2023.05.07 |
---|---|
디렉토리에 파일이 있는지 셸 스크립트에서 확인 (0) | 2023.05.02 |
View Result()와 Action Result() (0) | 2023.05.02 |
데이터 바인딩에서 두 가지 속성을 결합할 수 있습니까? (0) | 2023.05.02 |
EPF Composer 1.5에서 분야를 삭제하려면 어떻게 해야 합니까? (0) | 2023.05.02 |