Server.MapPath ("."), Server.MapPath ("~"), Server.MapPath (@ "\"), Server.MapPath ("/"). Apa bedanya?

446

Siapa pun dapat menjelaskan perbedaan antara Server.MapPath("."), Server.MapPath("~"), Server.MapPath(@"\")dan Server.MapPath("/")?

Manu
sumber

Jawaban:

809

Server.MapPath menentukan jalur relatif atau virtual untuk memetakan ke direktori fisik .

  • Server.MapPath(".")1 mengembalikan direktori fisik file saat ini (mis. Aspx) yang sedang dieksekusi
  • Server.MapPath("..") mengembalikan direktori induk
  • Server.MapPath("~") mengembalikan jalur fisik ke root aplikasi
  • Server.MapPath("/") mengembalikan path fisik ke root dari nama domain (tidak harus sama dengan root dari aplikasi)

Sebuah contoh:

Katakanlah Anda menunjuk aplikasi situs web ( http://www.example.com/) ke

C:\Inetpub\wwwroot

dan menginstal aplikasi toko Anda (sub web sebagai direktori virtual di IIS, ditandai sebagai aplikasi) di

D:\WebApps\shop

Misalnya, jika Anda memanggil Server.MapPath()permintaan berikut:

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

kemudian:

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

Jika Path dimulai dengan garis miring ke depan ( /) atau garis miring ke belakang ( \), jalur yang MapPath()dikembalikan seolah-olah Jalur itu jalur penuh, virtual.

Jika Path tidak dimulai dengan garis miring, jalur akan MapPath()dikembalikan relatif ke direktori permintaan yang sedang diproses.

Catatan: dalam C #, @adalah operator string literal kata demi kata yang berarti bahwa string harus digunakan "apa adanya" dan tidak diproses untuk urutan escape.

Catatan kaki

  1. Server.MapPath(null)dan Server.MapPath("")akan menghasilkan efek ini juga .
percikan
sumber
44
Luar biasa. Kami telah berjuang dengan Server.Bloody.MapPath. Terima kasih
gbn
26
Anda akan lebih baik menggunakan HostingEnvironment.MapPathkarena tidak memerlukan HttpContext: stackoverflow.com/q/944219/3205
skolima
25

Hanya untuk sedikit memperluas jawaban @ splattne:

MapPath(string virtualPath) panggilan berikut:

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

MapPath(VirtualPath virtualPath)pada gilirannya panggilan MapPath(VirtualPath virtualPath, VirtualPath baseVirtualDir, bool allowCrossAppMapping)yang berisi hal-hal berikut:

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

Jadi, jika Anda menelepon MapPath(null)atau MapPath(""), Anda secara efektif meneleponMapPath(".")

dav_i
sumber
4

1) Server.MapPath(".")- Mengembalikan "Direktori Fisik Saat Ini" dari file (misalnya aspx) yang dieksekusi.

Ex. Seharusnya D:\WebApplications\Collage\Departments

2) Server.MapPath("..")- Mengembalikan "Direktori Induk"

Ex. D:\WebApplications\Collage

3) Server.MapPath("~")- Mengembalikan "Jalan Fisik ke Root Aplikasi"

Ex. D:\WebApplications\Collage

4) Server.MapPath("/")- Mengembalikan jalur fisik ke akar Nama Domain

Ex. C:\Inetpub\wwwroot

Vaibhav_Penghasilan_Anda
sumber