asp.net-web-api - what - web api rest c#
Microsoft Web API: ¿Cómo se hace un Server.MapPath? (5)
Ya que Microsoft Web API no es MVC , no puedes hacer algo como esto:
var a = Request.MapPath("~");
ni esto
var b = Server.MapPath("~");
porque se encuentran debajo del espacio de nombres System.Web
, no del espacio de nombres System.Web.Http
.
Entonces, ¿cómo averiguas la ruta relativa del servidor en la API web ?
Solía hacer algo como esto en MVC :
var myFile = Request.MapPath("~/Content/pics/" + filename);
Lo que me daría la ruta absoluta en disco:
"C:/inetpub/wwwroot/myWebFolder/Content/pics/mypic.jpg"
Además de aquellos que se tropiezan con esto, una buena forma de ejecutar el nivel de prueba al usar la llamada HostingEnvironment, es si accedemos a decir un recurso compartido UNC: / example / que se asigna a ~ / example / puede ejecutar esto para evitar Problemas de IIS-Express:
#if DEBUG
var fs = new FileStream(@"//example/file",FileMode.Open, FileAccess.Read);
#else
var fs = new FileStream(HostingEnvironment.MapPath("~/example/file"), FileMode.Open, FileAccess.Read);
#endif
Me resulta útil en caso de que tenga derechos para realizar pruebas locales en un archivo, pero necesita la asignación de env una vez en producción.
La respuesta seleccionada no funcionó en mi aplicación Web API. Tuve que usar
System.Web.HttpRuntime.AppDomainAppPath
No puedo decir por el contexto que proporciona, pero si es algo que solo necesita hacer al iniciar la aplicación, aún puede usar Server.MapPath
en WebApiHttpApplication
; Por ejemplo, en Application_Start()
.
Solo estoy respondiendo tu pregunta directa; el ya mencionado HostingEnvironment.MapPath()
es probablemente la solución preferida.
Puede usar HostingEnvironment.MapPath en cualquier contexto donde no estén disponibles los objetos System.Web
como HttpContext.Current
(por ejemplo, también de un método estático).
var mappedPath = System.Web.Hosting.HostingEnvironment.MapPath("~/SomePath");
Consulte también ¿Cuál es la diferencia entre Server.MapPath y HostingEnvironment.MapPath?
string root = HttpContext.Current.Server.MapPath("~/App_Data");