c# مشاريع المسار المطلق يعود إلى المسار النسبي




مشاريع الفيجوال بيسك جاهزة (4)

وأنا أعلم أن هذا أمر قديم ولكني احتجت إلى حساب الدلائل الظاهرية (لكل تعليق لـ Costo). يبدو أن هذا يساعد:

static string RelativeFromAbsolutePath(string path)
{
    if(HttpContext.Current != null)
    {
        var request = HttpContext.Current.Request;
        var applicationPath = request.PhysicalApplicationPath;
        var virtualDir = request.ApplicationPath;
        virtualDir = virtualDir == "/" ? virtualDir : (virtualDir + "/");
        return path.Replace(applicationPath, virtualDir).Replace(@"\", "/");
    }

    throw new InvalidOperationException("We can only map an absolute back to a relative path if an HttpContext is available.");
}

إذا تمكنت من تحديد مكان وجود ملف والتحقق منه باستخدام Server.MapPath وأريد الآن إرسال المستخدم مباشرة إلى ذلك الملف ، فما هي أسرع طريقة لتحويل هذا المسار المطلق مرة أخرى إلى مسار ويب نسبي؟


إذا استخدمت Server.MapPath ، فيجب أن يكون لديك بالفعل مسار الويب النسبي. استناداً إلى وثائق MSDN ، تأخذ هذه الطريقة متغير واحد ، المسار ، وهو المسار الظاهري لملقم ويب. لذلك إذا تمكنت من استدعاء الطريقة ، يجب أن يكون لديك بالفعل الوصول إلى مسار الويب النسبي على الفور.


أنا أحب فكرة من Canoas. للأسف لم يكن "HttpContext.Current.Request" متاح (BundleConfig.cs).

لقد غيرت methode مثل هذا:

public static string RelativePath(this HttpServerUtility srv, string path)
{
     return path.Replace(HttpContext.Current.Server.MapPath("~/"), "~/").Replace(@"\", "/");
}

لن يكون من الجيد أن يكون Server.RelativePath (المسار) ؟

حسنا ، تحتاج فقط إلى تمديدها ؛-)

public static class ExtensionMethods
{
    public static string RelativePath(this HttpServerUtility srv, string path, HttpRequest context)
    {
        return path.Replace(context.ServerVariables["APPL_PHYSICAL_PATH"], "~/").Replace(@"\", "/");
    }
}

مع هذا يمكنك الاتصال ببساطة

Server.RelativePath(path, Request);




mappath