Absolute path back to web-relative path Absolute path back to web-relative path asp.net asp.net

Absolute path back to web-relative path


Perhaps this might work:

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

I'm using c# but could be adapted to vb.


Wouldn't it be nice to have Server.RelativePath(path)?

well, you just need to extend it ;-)

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

With this you can simply call

Server.RelativePath(path, Request);


I know this is old but I needed to account for virtual directories (per @Costo's comment). This seems to help:

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.");}