Quelle est la bonne façon de trouver le chemin absolu vers le dossier App_Data à partir d'un contrôleur dans un projet ASP.NET MVC? Je voudrais pouvoir travailler temporairement avec un fichier .xml et je ne veux pas coder en dur le chemin.
Cela ne fonctionne pas:
[HandleError]
public class HomeController : Controller
{
public ActionResult Index()
{
string path = VirtualPathUtility.ToAbsolute("~/App_Data/somedata.xml");
//.... do whatever
return View();
}
}
Je pense qu'en dehors du contexte Web VirtualPathUtility.ToAbsolute () ne fonctionne pas. le chemin de la chaîne revient sous la forme "C: \ App_Data \ somedata.xml"
Où dois-je déterminer le chemin du fichier .xml dans une application MVC? global.asax et coller une variable au niveau de l'application?
.net
asp.net-mvc
absolute-path
BuddyJoe
la source
la source
Réponses:
ASP.NET MVC1 -> MVC3
ASP.NET MVC4
Référence MSDN:
HttpServerUtility.MapPath, méthode
la source
Current
soitServer.MapPath(...)
comme SeriousM l'a mentionné.System.Web.Hosting.HostingEnvironment.MapPath()
C'est probablement une façon plus «correcte» de l'obtenir.
la source
J'essaie de prendre l'habitude d'utiliser
HostingEnvironment
au lieu deServer
car cela fonctionne aussi dans le contexte des services WCF.la source
System.Web.Hosting
espace de noms au cas où quelqu'un aurait besoin de connaître les informations pertinentesusing
. Réf: docs.microsoft.com/en-us/dotnet/api/…La façon la plus correcte est d'utiliser
HttpContext.Current.Server.MapPath("~/App_Data");
. Cela signifie que vous ne pouvez récupérer le chemin qu'à partir d'une méthode où leHttpContext
est disponible. C'est logique: le répertoire App_Data est une structure de dossiers de projet Web [1].Si vous avez besoin du chemin d'accès à ~ / App_Data à partir d'une classe où vous n'avez pas accès à,
HttpContext
vous pouvez toujours injecter une interface de fournisseur à l'aide de votre conteneur IoC:Implémentez-le en utilisant votre
HttpApplication
:Où
MyHttpApplication.GetAppDataPath
ressemble:[1] http://msdn.microsoft.com/en-us/library/ex526337%28v=vs.100%29.aspx
la source
HttpContext.Current
jamais être disponible à un endroit si vous l'utilisez - via un conteneur IoC - à un autre endroit? Où la propriété statique ne serait-elle pas disponible?Phil Haak a un exemple qui, je pense, est un peu plus stable lorsqu'il s'agit de chemins avec des séparateurs de répertoires de style "\" fous. Il gère également en toute sécurité la concaténation de chemin. Il est gratuit dans System.IO
Cependant, vous pouvez également essayer "AppDomain.CurrentDomain.BaseDirector" au lieu de "Server.MapPath".
la source
OU
la source
c'est la meilleure solution pour obtenir le chemin qui est exactement nécessaire pour l'instant
la source