Server.MapPath(".")، Server.MapPath("~")، Server.MapPath(@"\")، Server.MapPath("/").ماهو الفرق؟

StackOverflow https://stackoverflow.com/questions/275781

سؤال

هل يمكن لأحد أن يشرح الفرق بين Server.MapPath("."), Server.MapPath("~"), Server.MapPath(@"\") و Server.MapPath("/")?

هل كانت مفيدة؟

المحلول

Server.MapPath يحدد المسار النسبي أو الظاهري للتعيين إلى الدليل الفعلي.

  • Server.MapPath(".")1 إرجاع الدليل الفعلي الحالي للملف (على سبيل المثال.aspx) قيد التنفيذ
  • Server.MapPath("..") إرجاع الدليل الأصل
  • Server.MapPath("~") إرجاع المسار الفعلي إلى جذر التطبيق
  • Server.MapPath("/") إرجاع المسار الفعلي إلى جذر اسم المجال (ليس بالضرورة نفس جذر التطبيق)

مثال:

لنفترض أنك أشرت إلى تطبيق موقع ويب (http://www.example.com/) ل

C:\Inetpub\wwwroot

وقم بتثبيت تطبيق المتجر الخاص بك (الويب الفرعي كدليل ظاهري في IIS، تم وضع علامة عليه كتطبيق) في

D:\WebApps\shop

على سبيل المثال، إذا اتصلت Server.MapPath() في الطلب التالي:

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

ثم:

  • Server.MapPath(".")1 عائدات D:\WebApps\shop\products
  • Server.MapPath("..") عائدات D:\WebApps\shop
  • Server.MapPath("~") عائدات D:\WebApps\shop
  • Server.MapPath("/") عائدات C:\Inetpub\wwwroot
  • Server.MapPath("/shop") عائدات D:\WebApps\shop

إذا بدأ المسار إما بشرطة مائلة للأمام (/) أو شرطة مائلة للخلف (\)، ال MapPath() يُرجع مسارًا كما لو كان المسار مسارًا افتراضيًا كاملاً.

إذا لم يبدأ المسار بشرطة مائلة، فسيتم MapPath() تقوم بإرجاع مسار متعلق بدليل الطلب الذي تتم معالجته.

ملحوظة:شركة#، @ هو مشغل السلسلة الحرفية مما يعني أنه يجب استخدام السلسلة "كما هي" وعدم معالجتها لتسلسلات الهروب.

الحواشي

  1. Server.MapPath(null) و Server.MapPath("") سوف إنتاج هذا التأثير أيضا.

نصائح أخرى

وفقط للتوسع في الجواب @ splattne وقليلا:

وMapPath(string virtualPath) يدعو يلي:

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

وMapPath(VirtualPath virtualPath) بدوره يدعو MapPath(VirtualPath virtualPath, VirtualPath baseVirtualDir, bool allowCrossAppMapping) الذي يحتوي على ما يلي:

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

وحتى إذا كنت استدعاء MapPath(null) أو MapPath("")، الذي تتصل به بشكل فعال MapPath(".")

1) Server.MapPath(".") - إرجاع "التيار دليل البدنية" الملف (على سبيل المثال aspx) يتم تنفيذه

والسابقين. D:\WebApplications\Collage\Departments نفترض

2) Server.MapPath("..") - إرجاع "دليل الأم"

والسابقين. D:\WebApplications\Collage

و3) Server.MapPath("~") - إرجاع "المسار الفعلي إلى جذر التطبيق"

والسابقين. D:\WebApplications\Collage

و4) Server.MapPath("/") - إرجاع المسار الفعلي لجذر اسم المجال

والسابقين. C:\Inetpub\wwwroot

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top