Étant donné que Microsoft Web API n'est pas MVC , vous ne pouvez pas faire quelque chose comme ceci:
var a = Request.MapPath("~");
ni ça
var b = Server.MapPath("~");
car ceux-ci sont sous l' System.Web
espace de noms, pas l' System.Web.Http
espace de noms.
Alors, comment déterminez-vous le chemin d'accès relatif du serveur dans l' API Web ?
J'avais l'habitude de faire quelque chose comme ça dans MVC :
var myFile = Request.MapPath("~/Content/pics/" + filename);
Ce qui me donnerait le chemin absolu sur le disque:
"C:\inetpub\wwwroot\myWebFolder\Content\pics\mypic.jpg"
asp.net-web-api
Zachary Scott
la source
la source
IPathMapper
(vous allez probablement regrouper cela avec un tas d'autres préoccupations dans une plus grande interface de ceinture d'outils / utilitaire) avec la méthodestring MapPath(string virtualPath)
. Seule l'implémentation concrète pour vosWebApi IPathMapper
besoins à savoirSystem.Web.Hosting.HostingEnvironment
../images/
la source
En plus de ceux qui trébuchent, une bonne façon d'exécuter le niveau de test sur l'utilisation de l'appel HostingEnvironment est si vous accédez à un partage UNC par exemple: \ example \ qui est mappé sur ~ / example / vous pouvez l'exécuter pour contourner Problèmes avec IIS-Express:
Je trouve cela utile dans le cas où vous avez le droit de tester localement sur un fichier, mais que vous avez besoin du mappage env une fois en production.
la source
HostingEnvironment
classe est dans l'System.Web.Hosting
espace de noms.HostingEnvironment
DNX core 5.0?Je ne peux pas le dire à partir du contexte que vous fournissez, mais si c'est quelque chose que vous devez simplement faire au démarrage de l'application, vous pouvez toujours l'utiliser
Server.MapPath
dansWebApiHttpApplication
; par exemple dansApplication_Start()
.Je réponds simplement à votre question directe; le déjà mentionné
HostingEnvironment.MapPath()
est probablement la solution préférée.la source
Étant donné qu'il
Server.MapPath()
n'existe pas dans une API Web (Soap ou REST), vous devrez indiquer le répertoire local par rapport au répertoire home du contexte du serveur Web. La façon la plus simple de le faire est de:Vous pouvez ensuite l'utiliser pour concaténer une chaîne de chemin d'accès pour mapper le chemin d'accès relatif à n'importe quel fichier.
REMARQUE: les chemins de chaîne sont
\
et non/
comme ils le sont dans mvc.Ex:
renvoie vrai, en posant que c'est un chemin sonore dans votre exemple
la source
La réponse sélectionnée n'a pas fonctionné dans mon application Web API. Je devais utiliser
la source
~\folder
ou../images/
vers les chemins physiquesVous pouvez essayer comme:
var path = "~ / Image / test.png"; System.Web.Hosting.HostingEnvironment.MapPath (@ + chemin)
la source