Ruta absoluta hacia la ruta relativa a la web

Si he logrado localizar y verificar la existencia de un archivo usando Server.MapPath y ahora quiero enviar al usuario directamente a ese archivo, ¿cuál es la forma más rápida de convertir esa ruta absoluta nuevamente en una ruta web relativa?

Quizás esto podría funcionar:

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

Estoy usando c # pero podría ser adaptado a vb.

¿No sería bueno tener Server.RelativePath (ruta) ?

bueno, solo necesitas extenderlo 😉

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

Con esto puedes simplemente llamar

 Server.RelativePath(path, Request); 

Sé que esto es viejo, pero necesitaba contabilizar directorios virtuales (por comentario de @ Costo). Esto parece ayudar:

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

Me gusta la idea de Canoas. Lamentablemente, no tenía disponible “HttpContext.Current.Request” (BundleConfig.cs).

Cambié el método de esta manera:

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

Si usó Server.MapPath, entonces ya debería tener la ruta web relativa. De acuerdo con la documentación de MSDN , este método toma una variable, ruta , que es la ruta virtual del servidor web. Entonces, si fue capaz de llamar al método, ya debería tener acceso inmediato a la ruta web relativa.