Servidor.MapPath("."), Servidor.MapPath("~"), Servidor.MapPath(@"\"), Servidor.MapPath("/"). ¿Cuál es la diferencia?

Resuelto Manu asked hace 16 años • 4 respuestas

¿ Alguien puede explicar la diferencia entre Server.MapPath("."), y ?Server.MapPath("~")Server.MapPath(@"\")Server.MapPath("/")

Manu avatar Nov 09 '08 16:11 Manu
Aceptado

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 apuntaste una aplicación de sitio web ( http://www.example.com/) a

C:\Inetpub\wwwroot

e instalé la aplicación de su tienda (subweb como directorio virtual en IIS, marcada como aplicación) en

D:\WebApps\shop

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

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

entonces:

  • Server.MapPath(".")1 regresaD:\WebApps\shop\products
  • Server.MapPath("..")devolucionesD:\WebApps\shop
  • Server.MapPath("~")devolucionesD:\WebApps\shop
  • Server.MapPath("/")devolucionesC:\Inetpub\wwwroot
  • Server.MapPath("/shop")devolucionesD:\WebApps\shop

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

Si la ruta no comienza con una barra diagonal, devuelve MapPath()una ruta relativa al directorio de la solicitud que se está procesando.

Nota: en C#, @es el operador de cadena literal palabra por palabra, lo que significa que la cadena debe usarse "tal cual" y no procesarse para secuencias de escape.

Notas a pie de página

  1. Server.MapPath(null)y Server.MapPath("")producirá este efecto también .
splattne avatar Nov 09 '2008 10:11 splattne

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 llama MapPath(VirtualPath virtualPath, VirtualPath baseVirtualDir, bool allowCrossAppMapping)que contiene lo siguiente:

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

Entonces, si llamas MapPath(null)o MapPath(""), efectivamente estás llamandoMapPath(".")

dav_i avatar Jul 12 '2013 13:07 dav_i

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 avatar Jan 08 '2018 10:01 Vaibhav_Welcomes_You