Como la API web de Microsoft no es MVC , no puede hacer algo como esto:
var a = Request.MapPath("~");
ni esto
var b = Server.MapPath("~");
porque estos están debajo del System.Web
espacio de nombres, no el System.Web.Http
espacio de nombres.
Entonces, ¿cómo calcula la ruta relativa del servidor en la API web ?
Solía hacer algo así en MVC :
var myFile = Request.MapPath("~/Content/pics/" + filename);
Lo que me daría la ruta absoluta en el disco:
"C:\inetpub\wwwroot\myWebFolder\Content\pics\mypic.jpg"
asp.net-web-api
Zachary Scott
fuente
fuente
IPathMapper
(probablemente acumule esto con un montón de otras preocupaciones en una interfaz de herramienta / cinturón de herramientas más grande) con el métodostring MapPath(string virtualPath)
. Solo la implementación concreta para susWebApi IPathMapper
necesidadesSystem.Web.Hosting.HostingEnvironment
../images/
fuente
Además de aquellos que se topan con esto, una buena manera de ejecutar el nivel de prueba al usar la llamada HostingEnvironment es si accediendo, por ejemplo, un recurso compartido UNC: \ example \ que está asignado a ~ / example / podría ejecutar esto para evitarlo Problemas de IIS-Express:
Me parece útil en caso de que tenga derechos para probar localmente en un archivo, pero necesita la asignación de env una vez en producción.
fuente
HostingEnvironment
clase está en elSystem.Web.Hosting
espacio de nombres.HostingEnvironment
DNX core 5.0?No puedo decir que desde el contexto en el que la oferta, pero si es algo que sólo tiene que hacer en el inicio de aplicaciones, todavía se puede utilizar
Server.MapPath
enWebApiHttpApplication
; por ejemplo, enApplication_Start()
.Solo estoy respondiendo tu pregunta directa; la ya mencionada
HostingEnvironment.MapPath()
es probablemente la solución preferida.fuente
Como
Server.MapPath()
no existe dentro de una API web (Soap o REST), deberá indicar el directorio local-relativo al contexto de inicio del servidor web. La forma más fácil de hacerlo es con:Luego puede usar esto para concatenar una cadena de ruta para asignar la ruta relativa a cualquier archivo.
NOTA: las rutas de cadena son
\
y no/
como si estuvieran en mvc.Ex:
devuelve verdadero postulando que esta es una ruta de sonido en su ejemplo
fuente
La respuesta seleccionada no funcionó en mi aplicación API web. Tuve que usar
fuente
~\folder
o../images/
de rutas físicasPuedes probar como:
var path = "~ / Image / test.png"; System.Web.Hosting.HostingEnvironment.MapPath (@ + ruta)
fuente