Apa cara yang benar untuk menemukan jalur absolut ke folder App_Data dari Pengendali dalam proyek ASP.NET MVC? Saya ingin dapat bekerja sementara dengan file .xml dan saya tidak ingin hardcode path.
Ini tidak bekerja:
[HandleError]
public class HomeController : Controller
{
public ActionResult Index()
{
string path = VirtualPathUtility.ToAbsolute("~/App_Data/somedata.xml");
//.... do whatever
return View();
}
}
Saya pikir di luar konteks web VirtualPathUtility.ToAbsolute () tidak berfungsi. string path kembali sebagai "C: \ App_Data \ somedata.xml"
Di mana saya harus menentukan jalur file .xml di aplikasi MVC? global.asax dan tempelkan variabel level aplikasi?
.net
asp.net-mvc
absolute-path
BuddyJoe
sumber
sumber
Jawaban:
ASP.NET MVC1 -> MVC3
ASP.NET MVC4
Referensi MSDN:
Metode HttpServerUtility.MapPath
sumber
Current
atauServer.MapPath(...)
seperti yang disebutkan SeriousM.System.Web.Hosting.HostingEnvironment.MapPath()
Ini mungkin cara yang lebih "benar" untuk mendapatkannya.
sumber
Saya mencoba untuk membiasakan menggunakan
HostingEnvironment
daripadaServer
berfungsi dalam konteks layanan WCF juga.sumber
System.Web.Hosting
namespace kalau-kalau ada yang perlu tahu yang relevanusing
. Ref: docs.microsoft.com/en-us/dotnet/api/…Cara yang paling benar adalah menggunakan
HttpContext.Current.Server.MapPath("~/App_Data");
. Ini berarti Anda hanya dapat mengambil jalur dari metode di manaHttpContext
tersedia. Masuk akal: direktori App_Data adalah struktur folder proyek web [1].Jika Anda memerlukan path ke ~ / App_Data dari kelas di mana Anda tidak memiliki akses ke,
HttpContext
Anda selalu dapat menyuntikkan antarmuka penyedia menggunakan wadah IoC Anda:Terapkan dengan menggunakan
HttpApplication
:Di mana
MyHttpApplication.GetAppDataPath
terlihat seperti:[1] http://msdn.microsoft.com/en-us/library/ex526337%28v=vs.100%29.aspx
sumber
HttpContext.Current
pernah tersedia di satu tempat jika Anda menggunakannya - melalui wadah IOC - di tempat lain? Di mana properti statis tidak tersedia?Phil Haak memiliki contoh yang saya pikir sedikit lebih stabil ketika berhadapan dengan jalur dengan pemisah direktori gaya "\" gila. Itu juga aman menangani rangkaian jalan. Itu datang secara gratis di System.IO
Namun, Anda juga bisa mencoba "AppDomain.CurrentDomain.BaseDirector" alih-alih "Server.MapPath".
sumber
ATAU
sumber
ini adalah Solusi terbaik untuk mendapatkan jalan yang sebenarnya dibutuhkan untuk saat ini
sumber