Así que tengo un proyecto web y estoy tratando de obtener el directorio raíz del sitio web usando el método c # Directory.GetCurrentDirectory()
. No quiero usar una ruta estática ya que las ubicaciones de los archivos cambiarán en el futuro. Este método se está ejecutando en mi archivo imageProcess.aspx.cs, pero donde pensé que volvería:
C:\Users\tcbl\documents\visual studio 2010\Projects\ModelMonitoring\ModelMonitoring\imageProcess.aspx.cs
En cambio estoy obteniendo:
C:\Program Files\Common Files\Microsoft Shared\DevServer\10.0\
¿Alguien puede explicar por qué está sucediendo esto y cuál podría ser una posible solución? Muchas gracias.
Respuestas:
El directorio actual es una función a nivel del sistema; devuelve el directorio desde el que se inició el servidor. No tiene nada que ver con el sitio web.
Quieres
HttpRuntime.AppDomainAppPath
.Si está en una solicitud HTTP, también puede llamar
Server.MapPath("~/Whatever")
.fuente
HttpRuntime.BinDirectory
, pero eso fue fácil de determinar en el depurador, una vez que probé lo que mencionaste en tu respuesta.Server.MapPath
hace. Quieres stackoverflow.com/q/5823847/34397System.Web.HttpRuntime.AppDomainAppPath
ySystem.Web.HttpRuntime.HttpContext.Server.MapPath("~")
HttpContext
esSystem.Web.HttpContext.Current.Server.MapPath("~")
, no tieneHttpRuntime
Utilice este código:
Referencia detallada:
Server.MapPath
especifica la ruta relativa o virtual para mapear a un directorio físico.Server.MapPath(".")
devuelve el directorio físico actual del archivo (por ejemplo, aspx) que se está ejecutandoServer.MapPath("..")
devuelve el directorio padreServer.MapPath("~")
devuelve la ruta física a la raíz de la aplicaciónServer.MapPath("/")
devuelve la ruta física a la raíz del nombre de dominio (no es necesariamente la misma que la raíz de la aplicación)Un ejemplo:
Supongamos que apuntó una aplicación de sitio web ( http://www.example.com/ ) a
e instaló la aplicación de su tienda (sub web como directorio virtual en IIS, marcado como aplicación) en
Por ejemplo, si llama
Server.MapPath
en la siguiente solicitud:luego:
Si Path comienza con una barra inclinada hacia delante (/) o hacia atrás (), el
MapPath
método devuelve una ruta como si Path fuera una ruta virtual completa.Si la ruta no comienza con una barra, el
MapPath
método devuelve una ruta relativa al directorio de la solicitud que se está procesando.Nota: en C #, @ es el operador de cadena literal literal, lo que significa que la cadena debe usarse "tal cual" y no procesarse para secuencias de escape.
Notas al pie
Server.MapPath(null)
yServer.MapPath("")
producirá este efecto también.fuente
System.Web.Hosting.HostingEnvironment.MapPath("~")
su lugar, que funciona muy bien, sin dependencia deSystem.Web.HttpContext.Current