Wenn ich es geschafft habe, die Existenz einer Datei mit Server.MapPath zu finden und zu überprüfen, und ich möchte den Benutzer jetzt direkt an diese Datei senden, was ist die schnellste Art zu konvertieren dieser absolute Pfad zurück in einen relativen Web-Pfad?Absoluter Pfad zurück zum web-relativen Pfad
Antwort
dies könnte vielleicht funktionieren:
String RelativePath = AbsolutePath.Replace(Request.ServerVariables["APPL_PHYSICAL_PATH"], String.Empty);
(ich bin C# verwenden, aber zu vb angepasst werden könnte)
(@ Tags2k: Ich habe die oben genannte Antwort editierte)
Dies funktioniert nur im Rahmen einer Anfrage. – bzlm
@ [GateKiller] (http://stackoverflow.com/questions/3164?sort=oldest#3218): Beachten Sie, dass Ihre Lösung fehlschlagen kann, wenn Sie auf Ihrer Website IIS Virtual Directories verwenden, da der physische Pfad der Anwendung davon abweichen kann der physische Pfad der Datei. – Costo
Wenn Sie Server.MapPath verwendet haben, sollten Sie bereits den relativen Webpfad haben. Gemäß der MSDN documentation nimmt diese Methode eine Variable Pfad, die den virtuellen Pfad des Webservers ist. Wenn Sie also die Methode aufrufen konnten, sollten Sie den relativen Webpfad bereits sofort verfügbar haben.
Dies ist nicht unbedingt wahr - der MapPath-Aufruf könnte durch eine andere Methode ausgeführt und an meine File-Checker-Methode übergeben bzw. von dort aufgerufen werden (oder in meinem Fall) aus einer Reihe verschiedener Elemente, von denen eines mein Resources-Verzeichnis ist (definiert als "~/__ Ressourcen"). Offensichtlich führt das Anweisen des Benutzers zu diesem Pfad zu unerwarteten Ergebnissen. Dies wäre auch nützlich, um zu wissen, dass manchmal der absolute Dateipfad mit keiner anderen kontextuellen Information aus der Datenbank herausgezogen wurde. – tags2k
[@tagsk] (http://stackoverflow.com/questions/3164#3195) - Ich weiß nicht darüber. Wenn die in Server.MapPath eingegebene Zeichenfolge gültig ist und einen physischen Serverpfad zurückgibt, muss dies übrigens auch ein gültiger virtueller Pfad sein, unabhängig davon, wie Sie die Methode erstellt haben. Informationen zur Verwendung der Tilde (~) am Anfang einer virtuellen Adresse finden Sie in diesem MSDN-Artikel zu [ASP.NET-Websitepfade] (http://msdn.microsoft.com/en-us/library/ms178116.aspx). :> ASP.NET enthält die Webanwendung > root-Operator (~), die Sie verwenden können > beim Angeben eines Pfades im Server > c –
Yaakov - Nicht so. Zum Beispiel nimmt eine Funktion, die ich verwende, einen Root-Pfad und gibt eine 'IEnumerable
Wäre es nicht nett zu haben Server.RelativePath (Pfad)?
gut, man muss nur verlängern es ;-)
public static class ExtensionMethods
{
public static string RelativePath(this HttpServerUtility srv, string path, HttpRequest context)
{
return path.Replace(context.ServerVariables["APPL_PHYSICAL_PATH"], "~/").Replace(@"\", "/");
}
}
dies mit Ihnen einfach
nennenServer.RelativePath(path, Request);
ein besserer Ersatz für den physischen Pfad wäre ~ /. path.Replace (context.ServerVariables ("APPL_PHYSICAL_PATH"), "~ /") –
Ich weiß, das ist alt, aber ich brauchte für virtuelle Verzeichnisse zu berücksichtigen (pro @ Costos Kommentar). Dies scheint zu helfen:
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.");
}
Ich mag die Idee von Canoas. Leider hatte ich "HttpContext.Current.Request" nicht verfügbar (BundleConfig.cs).
änderte ich die Methode wie folgt aus:
public static string RelativePath(this HttpServerUtility srv, string path)
{
return path.Replace(HttpContext.Current.Server.MapPath("~/"), "~/").Replace(@"\", "/");
}
- 1. Absoluter Pfad und relativer Pfad
- 2. Absoluter Pfad der Anruferdatei
- 3. absoluter Pfad ... verwirrt (ubuntu)
- 4. Schluck und absoluter Pfad
- 5. Absoluter Pfad in RewriteRule
- 6. Convert Absoluter Pfad in relativen Pfad
- 7. Absoluter Pfad mit boost :: filesystem :: Pfad
- 8. JSF Bild und absoluter Pfad
- 9. Asp.Net Absoluter Pfad einer URL
- 10. Absoluter Pfad der Django-App
- 11. Verwenden absoluter Pfad oder ein relativer Pfad in React Strecke
- 12. Absoluter Pfad zum Arbeitsbereichsverzeichnis im Jenkins-Pipeline-Plugin
- 13. Absoluter Pfad zum Img auf LocalHost, über php
- 14. Absoluter Pfad eines Verzeichnisses * relativ * zum aktuellen Verzeichnis suchen
- 15. git: Absoluter Pfad der Datei, relativ zum Repo
- 16. Absoluter Pfad für error_page in nginx?
- 17. absoluter Pfad für Bilddatei funktioniert nicht
- 18. embedding absoluter Pfad für gemeinsam genutzte Bibliotheken
- 19. Absoluter zu relativer Pfad (Eclipse, JSP)
- 20. Clip zum gezeichneten Pfad
- 21. Symfony2: Zum angeforderten Pfad umleiten
- 22. Wie kann man überprüfen, ob ein Pfad absoluter Pfad oder relativer Pfad auf plattformübergreifende Weise mit Python ist?
- 23. Knoten path.relative falschen Pfad zurück
- 24. Sitecores FieldRenderer relativen Pfad zurück
- 25. how to org mode image absoluter Pfad des Exports html?
- 26. Wie wird ein tragbarer absoluter Pfad in Ruby erstellt?
- 27. mod_rewrite - Pfad zum Pfad einfügen - warum gibt es 3 Header?
- 28. Sqlite3 DB Pfad zum Download
- 29. Unterschied im physischen Pfad, Root-Pfad, virtuellen Pfad, relativen virtuellen Pfad, Anwendungspfad und absolutem Pfad?
- 30. SHGetFolderPath gibt den Pfad mit Fragezeichen zurück
Diese Frage ist zwei Jahre alt, die Möglichkeit, Kommentare damals noch nicht existierte posten. "MEINE GÜTE". – tags2k