Absolute path back to web-relative path
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.");}