2011-05-21 40 views
36

¿Cómo puedo obtener la ruta virtual relativa de la ruta física en asp.net? El método inverso es como a continuación:Obtención de una ruta virtual relativa desde la ruta física

Server.MapPath("Virtual Path Here"); 

Pero lo que es la inversa del método superior?

+8

Tenga en cuenta que varios directorios virtuales en IIS pueden asignarse al mismo directorio físico, incluso dentro de una sola aplicación. ¿Cómo puede responderse esta pregunta? –

Respuesta

32

Tal vez this question es lo que estás buscando. Allí se sugieren:

String RelativePath = AbsolutePath.Replace(Request.ServerVariables["APPL_PHYSICAL_PATH"], String.Empty); 
22
public static string MapPathReverse(string fullServerPath) 
    {    
     return @"~\" + fullServerPath.Replace(HttpContext.Current.Request.PhysicalApplicationPath,String.Empty); 
    } 
+0

Esto funciona, pero en mi caso PhysicalApplicationPath estaba en minúsculas por alguna razón, pero la ruta en mi fullServerPath no fue aunque se leyó desde el sistema de archivos. Dado que Windows no tiene rutas insensibles a las mayúsculas y minúsculas, es probable que se convierta todo en minúsculas –

8

También podría hacer algo como esto:

string relativePath = absolutePath.Replace(HttpContext.Current.Server.MapPath("~/"), "~/").Replace(@"\", "/"); 

La ventaja es que no es necesario HttpContext.Current.Request.

+0

Esta es en realidad una respuesta mucho mejor, como se mencionó, porque no necesita el objeto de solicitud. –

9
Request.ServerVariables["APPL_PHYSICAL_PATH"] 

está muy bien, pero no siempre. Está disponible solo si hay una solicitud HTTP.

Por otro lado la llamada

HostingEnvironment.ApplicationPhysicalPath 

es siempre disponible.

Cuestiones relacionadas