ASP.NET MVC - ابحث عن المسار المطلق إلى مجلد App_Data من وحدة التحكم
-
13-09-2019 - |
سؤال
ما هي الطريقة الصحيحة للعثور على المسار المطلق إلى مجلد App_Data من وحدة تحكم في مشروع ASP.NET MVC؟ أود أن أكون قادرا على العمل مؤقتا مع ملف .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"
أين يجب أن أحدد مسار ملف .xml في تطبيق MVC؟ 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();
ربما هذا هو الطريقة الأكثر صحة "للحصول عليه.
أحاول الحصول على العادة في استخدام 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 على مثال على ما أعتقد أنه أكثر استقرارا قليلا عند التعامل مع فواصل Directory Directory "" مجنون. كما يتعامل بأمان تسلسل المسار. يأتي مجانا في system.io
var fileName = Path.GetFileName(file.FileName);
var path = Path.Combine(Server.MapPath("~/App_Data/uploads"), fileName);
ومع ذلك، يمكنك أيضا تجربة "appdomain.currentdomain.basedirector" بدلا من "server.mappath".
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);
هذا هو أفضل حل للحصول على المسار ما هو بالضبط الحاجة الآن