ASP.NET MVC 프로젝트의 컨트롤러에서 App_Data 폴더의 절대 경로를 찾는 올바른 방법은 무엇입니까? .xml 파일로 일시적으로 작업하고 싶습니다. 경로를 하드 코딩하고 싶지 않습니다.
작동하지 않습니다.
[HandleError]
public class HomeController : Controller
{
public ActionResult Index()
{
string path = VirtualPathUtility.ToAbsolute("~/App_Data/somedata.xml");
//.... do whatever
return View();
}
}
웹 컨텍스트 VirtualPathUtility.ToAbsolute () 외부에서는 작동하지 않는다고 생각합니다. 문자열 경로는 “C : \ App_Data \ somedata.xml”로 다시 나타납니다.
MVC 앱에서 .xml 파일의 경로를 어디에서 결정해야합니까? global.asax를 응용 프로그램 수준 변수로 사용합니까?
답변
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 참조 :
답변
string path = AppDomain.CurrentDomain.GetData("DataDirectory").ToString();
이것은 아마도 “올바른”방법입니다.
답변
WCF 서비스의 맥락에서도 작동하기 때문에 HostingEnvironment
대신 사용 습관을 얻으려고합니다 Server
.
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은 미친 “\”스타일 디렉토리 구분 기호가있는 경로를 처리 할 때 조금 더 안정적이라고 생각하는 예를 가지고 있습니다. 또한 경로 연결을 안전하게 처리합니다. System.IO에서 무료로 제공됩니다.
var fileName = Path.GetFileName(file.FileName);
var path = Path.Combine(Server.MapPath("~/App_Data/uploads"), fileName);
그러나 “Server.MapPath”대신 “AppDomain.CurrentDomain.BaseDirector”를 시도 할 수도 있습니다.
답변
string filePath = HttpContext.Current.Server.MapPath("~/folderName/filename.extension");
또는
string filePath = HttpContext.Server.MapPath("~/folderName/filename.extension");
답변
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);
이것이 현재 필요한 경로를 얻는 가장 좋은 해결책입니다.