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


Risposte:


809

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

  • Server.MapPath(".")1 restituisce la directory fisica corrente del file (ad es. Aspx) in esecuzione
  • Server.MapPath("..") restituisce la directory principale
  • 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 (Web secondario 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 ritornaD:\WebApps\shop\products
  • Server.MapPath("..") ritorna D:\WebApps\shop
  • Server.MapPath("~") ritorna D:\WebApps\shop
  • Server.MapPath("/") ritorna C:\Inetpub\wwwroot
  • Server.MapPath("/shop") ritorna D:\WebApps\shop

Se Path inizia con una barra ( /) o una barra ( \), 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 letterale letterale della stringa indica che la stringa deve essere utilizzata "così com'è" e non elaborata per le sequenze di escape.

Le note

  1. Server.MapPath(null)e Server.MapPath("")sarà produrre questo effetto troppo .

44
Eccellente. Abbiamo combattuto con Server.Bloody.MapPath. Grazie
gbn

26
Vi sarà meglio utilizzare HostingEnvironment.MapPathin quanto non richiede HttpContext: stackoverflow.com/q/944219/3205
skolima

25

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

MapPath(string virtualPath) chiama il seguente:

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 chiamandoMapPath(".")


4

1) Server.MapPath(".")- Restituisce la "Directory fisica corrente" del file (ad es. aspx) In esecuzione.

Ex. supporre D:\WebApplications\Collage\Departments

2) Server.MapPath("..")- Restituisce la "Directory principale"

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.