2011-06-08 20 views
6

Uso asp.net 4 y C#.Convirtiendo ruta física a relativa con respecto a http: // localhost:

Tengo este código que me permite encontrar la ruta física de una imagen. Como puede ver, obtengo el archivo físico de mi máquina pagh: /// C :.

string pathRaw = HttpContext.Current.Request.PhysicalApplicationPath + "Statics\\Cms\\Front-End\\Images\\Raw\\"; 

Resultado:

file:///C:/......../f005aba1-e286-4d9e-b9db-e6239f636e63.jpg 

Pero necesito mostrar esta imagen en la parte delantera de mi aplicación web por lo que necesitaría un resultado como este:

http://localhost:1108/Statics/Cms/Front-End/Images/Raw/f005aba1-e286-4d9e-b9db-e6239f636e63.jpg 

¿Cómo hacerlo? ?

PD: Necesito convertir el resultado de variable pathRaw.

Espero poder expresarme, lamentablemente no estoy seguro acerca de la terminología en este caso.

Gracias por su ayuda!

+0

¿Existe alguna razón por la que no pueda usar la ruta relativa (/ Statistics/Cms/....)? –

+0

gracias Dave por su comentario, pero necesito convertir el resultado de pathRaw, no puedo usar la ruta relativa implícitamente en mi código. ¿Tienes alguna idea de cómo hacerlo?gracias en adnvace – GibboK

+0

no se puede convertir una ruta física a una URL de forma dinámica; lo único que tendría sentido es conocer los posibles valores raíz y la URL a la que finalmente se asignaron, y luego realizar una manipulación de cadenas para reemplazar la ruta raíz parte con la URL, y luego barras diagonales con barras diagonales ... pero todavía no entiendo por qué necesita usar la ruta física para acceder a su URL? Seguramente, si esto se ejecuta dentro de una aplicación ASP.NET, ¿puede usar la ruta relativa para mostrar la imagen? –

Respuesta

11

La cosa más fácil que hacer es deshacerse de la ruta de la aplicación física. Si no puede hacer eso en su código, simplemente quítelo de la variable pathRaw. De esta manera:

public string GetVirtualPath(string physicalPath) 
{ 
    if (!physicalPath.StartsWith(HttpContext.Current.Request.PhysicalApplicationPath)) 
    { 
     throw new InvalidOperationException("Physical path is not within the application root"); 
    } 

    return "~/" + physicalPath.Substring(HttpContext.Current.Request.PhysicalApplicationPath.Length) 
     .Replace("\\", "/"); 
} 

El código primero verifica si la ruta está dentro de la raíz de la aplicación. De lo contrario, no hay forma de descubrir una url para el archivo, por lo que se lanza una excepción.

La ruta de acceso virtual se construye quitando la ruta de acceso de la aplicación física, convirtiendo todas las barras diagonales inversas en barras diagonales y prefijando la ruta con "~/" para indicar que debe interpretarse como relativa a la raíz de la aplicación.

Después de eso, puede convertir la ruta virtual a una ruta relativa para la salida a un navegador usando ResolveClientUrl(virtualPath).

0

Puede usar Server.MapPath para esto.

string pathRaw = System.Web.HttpContext.Current.Server.MapPath(“somefile.jpg“); 
+0

Necesito convertir la variable pathRaw ... alguna idea? – GibboK

+0

Esto no es lo que está pidiendo, ya tiene la ruta física y necesita convertirla a una URL, lo que no es posible. Creo que se está acercando a esto de la manera incorrecta. –

+0

De acuerdo con Dave - La pregunta es cómo pasar de lo físico a lo virtual. – Losbear

0

Hacer uso de ApplicationPath - Obtiene ruta raíz de la aplicación virtual de la aplicación ASP.NET en el servidor.

Label1.Text = Request.ApplicationPath; 
Image1.ImageUrl = Request.ApplicationPath + "/images/Image1.gif"; 
+0

Pranay Trid con tu código (necesito tratar con la variable pathRaw) y este es el resultado: http: // localhost: 1108/C: /....../f005aba1-e286-4d9e-b9db-e6239f636e63. jpg ¿tienes alguna idea de cómo resolverlo? gracias – GibboK

+0

Supongo que olvidó configurar '' – eFloh

1

Obtiene la raíz de su aplicación utilizando Request.ApplicationPath a continuación, utilizar la respuesta de this question para obtener una ruta relativa.

Podría necesitar un poco de ajuste, pero debería permitirle hacer lo que está buscando.

1

Izquierda-tira el contenido pathRaw por el Request.ApplicationPath y crear la dirección URL utilizando

Uri navigateUri = new Uri(System.Web.HttpContext.Current.Request.Url, relativeDocumentPath); 
Cuestiones relacionadas