2011-07-28 10 views
5

Tengo la necesidad de redirigir a la página actual menos los argumentos de consulta.¿Response.Redirect (Request.Url.AbsolutePath) es siempre "seguro"?

Acabo de encontrar Request.Url.AbsolutePath, que parece que proporciona solo el ticket para pasar a Response.Redirect().

Parece que funciona bien en mi máquina de desarrollo. ¿Alguien sabe de algún problema potencial redirigir al valor de esta propiedad? Es difícil confirmar que sea "seguro" en todos los casos.

Respuesta

2

Podría ser un problema si usted "re-escrito" la URL internamente. Por ejemplo, el usuario solicita "/team.aspx" pero internamente transfiere la ejecución o reescribe la url como "/page.aspx?id=137".

Personalmente, prefiero usar Request.RawUrl (que siempre es local) y puede quitar la cadena de consulta.

Deshacerse de la parte de host de una solicitud no es un problema porque HTTP Redirect puede ser ruta en rutas absolutas ("/ foo/bar") y el navegador conservará el protocolo, puerto y nombre de host.

+0

. Leí su primer párrafo varias veces pero aún no lo entiendo del todo. Si el usuario solicita '/ team.aspx', entonces esperaría que' Request.Url.AbsolutePath' devolviera '/ team.aspx'. ¿De dónde viene '/page.aspx? Id = 137'? –

+0

@Marcelo - Pero él no está reescribiendo la url. – JonH

+0

Jonathan, si utiliza alguna forma de URL, vuelva a escribir la URL en AbsolutePath que no es la misma URL en RawUrl. RawUrl es lo que se envió a través de HTTP Request y es lo que el usuario ve en su navegador. –

0

Yo usaría Request.Url.OriginalString.

La ruta absoluta elimina la parte del host de la URL.

Tome un vistazo a esto: http://wdevs.blogspot.com/2009/03/url-properties-of-request-to-aspnet.html

+0

Pero 'OriginalString' incluye la cadena de consulta. Sé que podría despojarlo, pero ¿qué hay de malo en redireccionar a 'Request.Url.AbsolutePath'? Siempre que esté redireccionando al mismo dominio, no estoy seguro de entender el problema. –

+0

@JOnathan Wood: leyó mal su publicación, tiene razón, no hay problemas con lo que está tratando de hacer. Si no desea los parámetros de consulta reales, utilice 'Request.Url.AbsolutePath' – JonH