Pregunta

Tengo un método en el que quiero redirigir al usuario a una página de inicio de sesión ubicada en la raíz de mi aplicación web.

Estoy usando el siguiente código:

Response.Redirect("~/Login.aspx?ReturnPath=" + Request.Url.ToString());

Aunque esto no funciona.Supuse que ASP.NET resolvería automáticamente la URL en la ruta correcta.Normalmente, solo usaría

Response.Redirect("../Login.aspx?ReturnPath=" + Request.Url.ToString());

pero este código está en una página maestra y se puede ejecutar desde cualquier nivel de carpeta.¿Cómo soluciono este problema?

¿Fue útil?

Solución

Creo que necesitas eliminar "~/" y reemplazarlo solo con "/", creo que / es la raíz

¡ALTO AHÍ! :-) a menos que desee codificar su aplicación web para que solo pueda instalarse en la raíz de un sitio web.

"~/" es lo correcto a usar, pero la razón por la que su código original no funcionó como se esperaba es que ResolveUrl (que es utilizado internamente por Redirect) intenta averiguar primero si la ruta que está pasando es una URL absoluta (p. ej."**http://servidor/**foo/bar.htm" en lugar de "foo/bar.htm"), pero desafortunadamente lo hace simplemente buscando un carácter de dos puntos ':' en la URL que le proporciona.Pero en este caso encuentra dos puntos en la URL que proporcionas en el ReturnPath valor de la cadena de consulta, lo que lo engaña; por lo tanto, su '~/' no se resuelve.

La solución es que debería codificar la URL del ReturnPath valor que escapa al problemático ':' junto con cualquier otro carácter especial.

Response.Redirect("~/Login.aspx?ReturnPath=" + Server.UrlEncode(Request.Url.ToString()));

Además, recomiendo que usted (o cualquier persona) nunca use Uri.ToString - porque proporciona una versión más "amigable" y legible por humanos de la URL, no necesariamente correcta (no deja escapar las cosas).En su lugar, utilice Uri.AbsoluteUri, así:

Response.Redirect("~/Login.aspx?ReturnPath=" + Server.UrlEncode(Request.Url.AbsoluteUri));

Otros consejos

puede resolver la primera respuesta de URL.Redirect ("~/Login.aspx);y agregue los parámetros después de que se haya resuelto.

¿Qué pasa con el uso

Response.Redirect(String.Format("http://{0}/Login.aspx?ReturnPath={1}", Request.ServerVariables["SERVER_NAME"], Request.Url.ToString()));
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top