Server.MapPath (“.”), Server.MapPath (“~”), Server.MapPath (@ “\”), Server.MapPath (“/”). Qual è la differenza?

Qualcuno può spiegare la differenza tra Server.MapPath(".") , Server.MapPath("~") , Server.MapPath(@"\") e Server.MapPath("/") ?

Server.MapPath specifica il percorso relativo o virtuale per mappare una directory fisica .

  • Server.MapPath(".") 1 restituisce la directory fisica corrente del file (ad es. Aspx) in esecuzione
  • Server.MapPath("..") restituisce la directory padre
  • Server.MapPath("~") restituisce il percorso fisico alla radice dell’applicazione
  • Server.MapPath("/") restituisce il percorso fisico alla radice del nome di dominio (non è necessariamente uguale alla radice dell’applicazione)

Un esempio:

Supponiamo che tu abbia indicato un’applicazione del sito Web ( http://www.example.com/ ) a

 C:\Inetpub\wwwroot 

e installato l’applicazione del negozio (substring come directory virtuale in IIS, contrassegnata come applicazione) in

 D:\WebApps\shop 

Ad esempio, se si chiama Server.MapPath() nella seguente richiesta:

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

poi:

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

Se il percorso inizia con una barra ( / ) o una barra rovesciata ( \ ), MapPath() restituisce un percorso come se Path fosse un percorso virtuale completo.

Se Path non inizia con una barra, MapPath() restituisce un percorso relativo alla directory della richiesta in elaborazione.

Nota: in C #, @ è l’operatore di stringa letterale letterale che significa che la stringa deve essere utilizzata “così com’è” e non essere elaborata per le sequenze di escape.

Le note

  1. Server.MapPath(null) e Server.MapPath("") produrranno anche questo effetto .

Solo per espandere un po ‘la risposta di @ splattne:

MapPath(string virtualPath) chiama quanto segue:

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

MapPath(VirtualPath virtualPath) a sua volta chiama MapPath(VirtualPath virtualPath, VirtualPath baseVirtualDir, bool allowCrossAppMapping) che contiene quanto segue:

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

Quindi, se chiami MapPath(null) o MapPath("") , stai effettivamente chiamando MapPath(".")

1) Server.MapPath(".") – Restituisce la “Directory fisica corrente” del file (ad es. aspx ) in esecuzione.

Ex. Supponiamo che D:\WebApplications\Collage\Departments

2) Server.MapPath("..") – Restituisce la “Directory padre”

Ex. D:\WebApplications\Collage

3) Server.MapPath("~") – Restituisce il “Percorso fisico alla radice dell’applicazione”

Ex. D:\WebApplications\Collage

4) Server.MapPath("/") – Restituisce il percorso fisico alla radice del Nome dominio

Ex. C:\Inetpub\wwwroot