asp.net - net - Server.MapPath("."), Server.MapPath("~"), Server.MapPath(@ "/"), Server.MapPath("/"). ¿Cuál es la diferencia?
server mappath in net core (3)
¿Alguien puede explicar la diferencia entre Server.MapPath(".")
, Server.MapPath("~")
, Server.MapPath(@"/")
y Server.MapPath("/")
?
1) Server.MapPath(".")
: Devuelve el "Directorio físico actual" del archivo (por ejemplo, aspx
) que se está ejecutando.
Ex. Supongamos que 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
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 a MapPath(VirtualPath virtualPath, VirtualPath baseVirtualDir, bool allowCrossAppMapping)
que contiene lo siguiente:
//...
if (virtualPath == null)
{
virtualPath = VirtualPath.Create(".");
}
//...
Entonces, si llama a MapPath(null)
o MapPath("")
, efectivamente está llamando a MapPath(".")
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 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 la misma que la raíz de la aplicación)
Un ejemplo:
Digamos que usted señaló una aplicación de sitio web ( http://www.example.com/
) para
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 a Server.MapPath()
en la siguiente solicitud:
http://www.example.com/shop/products/GetProduct.aspx?id=2342
entonces:
-
Server.MapPath(".")
1 devuelveD:/WebApps/shop/products
-
Server.MapPath("..")
devuelveD:/WebApps/shop
-
Server.MapPath("~")
devuelveD:/WebApps/shop
-
Server.MapPath("/")
devuelveC:/Inetpub/wwwroot
-
Server.MapPath("/shop")
devuelveD:/WebApps/shop
Si la Ruta comienza con una barra inclinada ( /
) o una barra MapPath()
/
), el MapPath()
devuelve una ruta como si la Ruta fuera una ruta virtual completa.
Si la Ruta no comienza con una barra diagonal, el MapPath()
devuelve una ruta relativa al directorio de la solicitud que se está procesando.
Nota: en C #, @
es el operador literal de cadena 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("")
también producirán este efecto .