Absoluter Pfad zurück zum Web-relativen Pfad

  • Wenn es mir gelungen ist, das Vorhandensein einer Datei mithilfe von Server.MapPath zu ermitteln und zu überprüfen, und ich den Benutzer jetzt direkt an diese Datei senden möchte, was ist der schnellste Weg, um diesen absoluten Pfad zurück in einen relativen Webpfad zu konvertieren?

    20 March 2018
    Agnel AmodiaEhsan Irannejad
4 answers
  • Vielleicht funktioniert das:

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

    Ich verwende c #, könnte aber an vb angepasst werden.

    20 March 2018
    Nisarg Shahuser2393156
  • Wäre es nicht schön, Server.RelativePath (Pfad) zu haben?

    Nun, Sie müssen es nur erweitern; -)

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

    Hiermit rufen Sie einfach

     auf Server.RelativePath(path, Request);
     
    24 October 2013
    Canoas
  • Ich weiß, das ist alt, aber ich musste virtuelle Verzeichnisse berücksichtigen (per @ Costos Kommentar). Das 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.");
    }
     
    07 February 2016
    Markus SafarMHop
  • Ich mag die Idee von Canoas. Leider hatte ich nicht "HttpContext.Current.Request" (BundleConfig.cs) verfügbar.

    Ich habe die Methode folgendermaßen geändert:

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