Obteniendo el directorio actual en la aplicación web .NET

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 ejecuta 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é sucede esto y cuál podría ser la posible solución? Muchas gracias.

El directorio actual es una función de nivel de sistema; devuelve el directorio desde el que se inició el servidor. No tiene nada que ver con el sitio web.

Desea HttpRuntime.AppDomainAppPath .

Si tiene una solicitud HTTP, también puede llamar a Server.MapPath("~/Whatever") .

Usa este código:

  HttpContext.Current.Server.MapPath("~") 

Referencia detallada:

Server.MapPath especifica la ruta relativa o virtual para asignar a un directorio físico.

  • Server.MapPath(".") Devuelve el directorio físico actual del archivo (por ejemplo, aspx) que se está ejecutando
  • Server.MapPath("..") devuelve el directorio principal
  • Server.MapPath("~") devuelve la ruta física a la raíz de la aplicación
  • Server.MapPath("/") devuelve la ruta física a la raíz del nombre de dominio (no es necesariamente lo mismo que la raíz de la aplicación)

Un ejemplo:

Digamos que apuntó una aplicación de sitio web ( http://www.example.com/ ) a

 C:\Inetpub\wwwroot 

e instaló su aplicación de tienda (sub-web como directorio virtual en IIS, marcado como aplicación) en

 D:\WebApps\shop 

Por ejemplo, si llama a Server.MapPath en la siguiente solicitud:

 http://www.example.com/shop/products/GetProduct.aspx?id=2342 

entonces:

 Server.MapPath(".") returns D:\WebApps\shop\products Server.MapPath("..") returns D:\WebApps\shop Server.MapPath("~") returns D:\WebApps\shop Server.MapPath("/") returns C:\Inetpub\wwwroot Server.MapPath("/shop") returns D:\WebApps\shop 

Si Path comienza con una barra inclinada hacia adelante (/) o hacia atrás (), el método MapPath devuelve una ruta como si la ruta fuese una ruta virtual completa.

Si Ruta no comienza con una barra inclinada, el método MapPath 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 se debe usar “tal cual” y no se debe procesar para las secuencias de escape.

Notas a pie de página

Server.MapPath(null) y Server.MapPath("") producirán este efecto también.