Comment puis-je résoudre un chemin d'accès relatif à un ASP.NET MVC 4 racine de l'application?
Comment puis-je résoudre des chemins d'accès relatifs à un ASP.NET MVC 4 application à la racine? C'est, je veux ouvrir les fichiers appartenant à l'application à partir des actions de contrôleur, référencé comme ~/Data/data.html
. Ces chemins sont généralement spécifiés dans Web.config
.
EDIT:
Par "résoudre", je veux dire de transformer un chemin relatif à la racine de l'application répertoire d'un chemin absolu .e.g. ~/Data/data.html
→ C:\App\Data\Data.html
.
- C'est ainsi que vous obtenez "référence" ces fichiers à partir de la racine...
- Que voulez-vous dire, que le ~ obtient élargi automatiquement?
- HttpContext.Actuel.Serveur.MapPath ?
- Expliquer ce que vous entendez par "résoudre". Vous souhaitez envoyer un fichier à l'utilisateur? Vous souhaitez faire référence à une image ou d'un fichier css à un élément de votre page? Vous souhaitez créer un lien vers le fichier?
- Voir mon édité question.
- Cela n'aide pas. Pour quelle raison êtes-vous essayer de faire ça?
- Le fichier est seulement à la lecture sur le serveur, il n'a pas vraiment d'importance mais comme je suis seulement intéressé à obtenir le chemin d'accès absolu... Qui devrait être suffisant pour définir l'étendue du problème.
- Ah ok, donc vous voulez obtenir le chemin Absolu vers le dossier App_Data?
- Vous voulez Serveur.MapPath ensuite.
- Oui, sauf si il y a un peu plus idiomatiques/automatique de façon à élargir les chemins spécifiés dans le Web.config par rapport à la racine de l'application.
- Oui, vous utilisez MapPath (voir la réponse) qui va vous donner le chemin d'accès Absolu.
Vous devez vous connecter pour publier un commentaire.
Pour obtenir le chemin absolu utiliser ceci:
EDIT:
Pour obtenir Contexte du Contrôleur supprimer
.Current
de la ligne ci-dessus. En utilisantHttpContext
par lui-même, il est plus facile de Tester, car il est basé sur le Contrôleur du Contexte, par conséquent, plus localisée.Je me rends compte maintenant que je n'aime pas la façon dont
Server.MapPath
travaux (interne appelle éventuellementHostingEnvironment.MapPath
) j'ai Donc maintenant vous recommandons de toujours utiliserHostingEnvironment.MapPath
parce que sa statique et ne dépend pas du contexte, à moins bien sûr, vous voulez que...HttpContext
n'a pas de propriétéCurrent
. Qu'est-ce?Current
avecApplicationInstance
HttpContext
au lieu deHttpContext.Current
que c'est unController
propriété d'instance. Voir stackoverflow.com/questions/785413/....HttpContext
de la propriété peut être moqué lors de l'essai, souhaitez mettre à jour votre réponse en tant que telle? Il fonctionne au moins.J'ai trouver ce code utile quand j'ai besoin d'un chemin à l'extérieur d'un contrôleur, comme quand je suis à l'initialisation des composants Mondiale.asax.cs:
Suffit d'utiliser la suite
Dans l'action, vous pouvez appeler le:
qui retourne le chemin d'accès physique en référence à l'actuel contrôleur. Si vous avez besoin seulement le chemin de la racine d'appel:
Dans votre controller:
Cela vous permet de tester le contrôleur Moq comme suit: