Server.MapPath (“.”), Server.MapPath (“~”), Server.MapPath (@ “\”), Server.MapPath (“/”). ¿Cuál es la diferencia?

Respuestas:

809

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

  • Server.MapPath(".")1 devuelve el directorio físico actual del archivo (por ejemplo, aspx) que se está ejecutando
  • Server.MapPath("..") devuelve el directorio padre
  • 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 la misma 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, marcada como aplicación) en

D:\WebApps\shop

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

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

entonces:

  • Server.MapPath(".")1 vuelveD:\WebApps\shop\products
  • Server.MapPath("..") devoluciones D:\WebApps\shop
  • Server.MapPath("~") devoluciones D:\WebApps\shop
  • Server.MapPath("/") devoluciones C:\Inetpub\wwwroot
  • Server.MapPath("/shop") devoluciones D:\WebApps\shop

Si la ruta comienza con una barra diagonal ( /) o una barra diagonal inversa ( \), MapPath()devuelve una ruta como si la ruta fuera una ruta virtual completa.

Si la ruta no comienza con una barra inclinada, MapPath()devuelve una ruta relativa al directorio de la solicitud que se procesa.

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

  1. Server.MapPath(null)y Server.MapPath("")va a producir este efecto también .
splattne
fuente
44
Excelente. Hemos estado luchando con Server.Bloody.MapPath. Gracias
gbn
26
Será mejor usarlo HostingEnvironment.MapPathya que no requiere HttpContext: stackoverflow.com/q/944219/3205
skolima
25

Solo para ampliar un poco la respuesta de @ splattne:

MapPath(string virtualPath) llama a lo siguiente:

public string MapPath(string virtualPath)
{
    return this.MapPath(VirtualPath.CreateAllowNull(virtualPath));
}

MapPath(VirtualPath virtualPath)a su vez, llamadas MapPath(VirtualPath virtualPath, VirtualPath baseVirtualDir, bool allowCrossAppMapping)que contienen lo siguiente:

//...
if (virtualPath == null)
{
    virtualPath = VirtualPath.Create(".");
}
//...

Entonces, si llamas MapPath(null)o MapPath(""), estás llamando efectivamenteMapPath(".")

dav_i
fuente
4

1) Server.MapPath(".")- Devuelve el "Directorio físico actual" del archivo (por ejemplo aspx) que se está ejecutando.

Ex. Suponer D:\WebApplications\Collage\Departments

2) Server.MapPath("..")- Devuelve el "Directorio principal"

Ex. D:\WebApplications\Collage

3) Server.MapPath("~")- Devuelve la "Ruta física a la raíz de la aplicación"

Ex. D:\WebApplications\Collage

4) Server.MapPath("/")- Devuelve la ruta física a la raíz del nombre de dominio

Ex. C:\Inetpub\wwwroot

Vaibhav_Welcomes_You
fuente