2012-03-14 13 views
21

¿Cómo puedo obtener la URL relativa a la aplicación desde Request.Url.AbsolutePath?Obtener URL relativa a la aplicación de Request.Url.AbsolutePath

VirtualPathUtility parece que solo funciona con ~/XXX urls?

+0

Hola, échale un vistazo aquí: http://stackoverflow.com/questions/3681052/get-absolute-url-from-relative-path-refactored-method –

+0

@felipeoriani: Esa es una ruta relativa hacia lo absoluto (lo contrario de lo que Yo quiero). – jgauffin

+0

¿Es 'Request.ApplicationPath' lo que quieres? – V4Vendetta

Respuesta

15

Lo resuelto de esta manera:

// create an absolute path for the application root 
var appUrl = VirtualPathUtility.ToAbsolute("~/"); 

// remove the app path (exclude the last slash) 
var relativeUrl = HttpContext.Current.Request.Url.AbsolutePath.Remove(0, appUrl.Length - 1); 
+1

Se han mejorado los errores de compilación. Lo siento, olvidé decírtelo. – Pankaj

+0

si HttpContext.Current.Request.Url.AbsolutePath tiene un% 20 para Space ¿qué debo hacer? – Marwan

+0

Reemplázalo con un espacio. O use 'Uri.DecodeXXx()' (no recuerdo el nombre del método) – jgauffin

1
String appUrl = VirtualPathUtility.ToAbsolute("~/"); 
String RelativePath = new System.Uri(Page.Request.Url, "").PathAndQuery.Substring(appUrl.Length-1) 
+0

¿Qué genera una aplicación relativa a url? – jgauffin

+0

Supongamos que tengo una URL 'http: // localhost: 49484/Website/Default.aspx' Esto te dará /Default.aspx – Pankaj

+0

¿Estás haciendo lo mismo que yo hice en mi respuesta, pero un poco más complejo? – jgauffin

20

Es un poco tarde para responder, pero no es una solución elegante a este. Puede usar

Request.Url.PathAndQuery 

Esto devolverá la ruta relativa de la página.

Por ejemplo, si la URL es www.example.com/products?A=a&B=b&C=c, la pieza anterior de código volverá /products?A=a&B=b&C=c

+7

No es una URL relativa. Es un camino absoluto desde la raíz. No funcionaría para directorios virtuales. – jgauffin

+3

Pero es lo que mucha gente necesita exactamente cuando terminan aquí :) – Stefanvds

+0

Esto no incluye ningún ancla, lo cual yo quería. –

3

Creo que esta es la manera más limpia:

new Uri(Request.Url.PathAndQuery, UriKind.Relative)) 
4

Esto funcionó para mí:

VirtualPathUtility.MakeRelative("~", Request.Url.AbsolutePath) 

Por ejemplo, si la raíz del sitio web es /Website y Request.Url.AbsolutePath es /Website/some/path, esto devolverá some/path.

6

Para hacer esto sin usar la manipulación de cadenas y gastos de ruta relativa de la aplicación utilicé:

var relativeUrl = VirtualPathUtility.ToAppRelative(
     new Uri(context.Request.Url.PathAndQuery, UriKind.Relative).ToString()); 
+0

¿Por qué el 'nuevo Uri (context.Request.Url.PathAndQuery, UriKind.Relative) .ToString()'? ¿No es exactamente 'context.Request.Url.PathAndQuery' lo mismo? – MiMo

0

basarse en respuesta agradable de Ashwin Singh - necesitaba el vínculo de anclaje para ser incluido con mi URL relativa, por lo que simplemente volver a agregar al final:

Request.Url.PathAndQuery + Request.Url.Fragment 

Así http://localhost:8080/abc/d?foo=bar#jazz convierte /abc/d?foo=bar#jazz.

Cuestiones relacionadas