Ś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?
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.
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);
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.");
}
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(@"\", "/");
}
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.
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