Wie kann der absolute Pfad zum Ordner App_Data von einem Controller in einem ASP.NET MVC-Projekt korrekt ermittelt werden? Ich möchte vorübergehend mit einer XML-Datei arbeiten können und möchte den Pfad nicht fest codieren.
Das funktioniert nicht:
[HandleError]
public class HomeController : Controller
{
public ActionResult Index()
{
string path = VirtualPathUtility.ToAbsolute("~/App_Data/somedata.xml");
//.... do whatever
return View();
}
}
Ich denke, außerhalb des Webkontexts funktioniert VirtualPathUtility.ToAbsolute () nicht. Der Zeichenfolgenpfad wird als "C: \ App_Data \ somedata.xml" zurückgegeben.
Wo soll ich den Pfad der XML-Datei in einer MVC-App bestimmen? global.asax und eine Variable auf Anwendungsebene?
.net
asp.net-mvc
absolute-path
BuddyJoe
quelle
quelle
Antworten:
ASP.NET MVC1 -> MVC3
ASP.NET MVC4
MSDN-Referenz:
HttpServerUtility.MapPath-Methode
quelle
Current
oderServer.MapPath(...)
wie von SeriousM erwähnt.System.Web.Hosting.HostingEnvironment.MapPath()
Dies ist wahrscheinlich ein "richtigerer" Weg, um es zu bekommen.
quelle
Ich versuche, mich daran zu gewöhnen,
HostingEnvironment
anstatt zu verwenden,Server
wie es auch im Kontext von WCF-Diensten funktioniert.quelle
System.Web.Hosting
Namespace für den Fall, dass jemand das Relevante kennen mussusing
. Ref: docs.microsoft.com/en-us/dotnet/api/…Der richtigste Weg ist zu verwenden
HttpContext.Current.Server.MapPath("~/App_Data");
. Dies bedeutet, dass Sie den Pfad nur von einer Methode abrufen können, für die derHttpContext
verfügbar ist. Es ist sinnvoll: Das Verzeichnis App_Data ist eine Ordnerstruktur für Webprojekte [1].Wenn Sie den Pfad zu ~ / App_Data von einer Klasse benötigen, auf die
HttpContext
Sie keinen Zugriff haben, können Sie jederzeit eine Provider-Schnittstelle mit Ihrem IoC-Container einfügen:Implementieren Sie es mit
HttpApplication
:Wo
MyHttpApplication.GetAppDataPath
sieht es aus:[1] http://msdn.microsoft.com/en-us/library/ex526337%28v=vs.100%29.aspx
quelle
HttpContext.Current
jemals nicht an einem Ort verfügbar sein, wenn Sie sie - über einen IoC-Container - an einem anderen Ort verwenden? Wo wäre die statische Eigenschaft nicht verfügbar?Phil Haak hat ein Beispiel, das meiner Meinung nach etwas stabiler ist, wenn es um Pfade mit verrückten Verzeichnis-Trennzeichen im "\" - Stil geht. Es behandelt auch sicher die Pfadverkettung. Es ist kostenlos in System.IO
Sie können jedoch auch "AppDomain.CurrentDomain.BaseDirector" anstelle von "Server.MapPath" ausprobieren.
quelle
ODER
quelle
Dies ist die beste Lösung, um den Pfad zu finden, der genau für den Moment benötigt wird
quelle