Ścieżka bezwzględna powrót do web-ścieżka względna

Jeśli udało mi się zlokalizować i zweryfikować istnienie pliku za pomocą serwera.MapPath i teraz chcę wysłać użytkownika bezpośrednio do tego pliku, jaki jest najszybszy{[2] } sposób na konwersję tej bezwzględnej ścieżki z powrotem do względnej ścieżki sieciowej?

Author: Agnel Amodia, 2008-08-06

5 answers

Być może to zadziała:

String RelativePath = AbsolutePath.Replace(Request.ServerVariables["APPL_PHYSICAL_PATH"], String.Empty);

używam c# , ale może być dostosowany do vb.

 50
Author: GateKiller,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-20 14:18:12

Czyż nie byłoby miło mieć Serwer.RelativePath (path) ?

Cóż, wystarczy go rozszerzyć; -)

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

Z tym można po prostu zadzwonić

Server.RelativePath(path, Request);
 35
Author: Canoas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-24 15:42:00

Wiem, że to stare, ale musiałem uwzględnić katalogi wirtualne(za komentarz @ Costo). To chyba pomaga:

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.");
}
 12
Author: AlexCuse,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-07 14:12:30

Podoba mi się pomysł z Canoas. Niestety nie miałem " HttpContext.Aktualne.Request " dostępny (BundleConfig.cs).

Zmieniłem metodę tak:

public static string RelativePath(this HttpServerUtility srv, string path)
{
     return path.Replace(HttpContext.Current.Server.MapPath("~/"), "~/").Replace(@"\", "/");
}
 4
Author: Pierre Chavaroche,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-24 08:19:45

Jeśli korzystałeś z serwera.MapPath, wtedy powinieneś mieć już względną ścieżkę www. Zgodnie z dokumentacją MSDN , Metoda ta przyjmuje jedną zmienną, path , która jest wirtualną ścieżką serwera www. Jeśli więc udało Ci się wywołać metodę, powinieneś mieć już dostęp do względnej ścieżki sieciowej.

 2
Author: Yaakov Ellis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-06 09:23:44