c# - parametros - Response.Redirect usando ~ Path
response.redirect c# parametros (2)
¿Qué tal usar
Response.Redirect(String.Format("http://{0}/Login.aspx?ReturnPath={1}", Request.ServerVariables["SERVER_NAME"], Request.Url.ToString()));
Tengo un método donde 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());
Esto no funciona, sin embargo. Mi suposición era 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 puedo solucionar este problema?
Creo que debes soltar el "~ /" y reemplazarlo con solo "/", creo / 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 para usar, pero la razón por la que el código original no funcionó como se esperaba es que ResolveUrl
(que se usa internamente por Redirect
) intenta primero averiguar si la ruta que está pasando es un absoluto URL (por ejemplo, "** http: // servidor / ** foo / bar.htm" en oposición a "foo / bar.htm") - pero desafortunadamente lo hace simplemente buscando un carácter de dos puntos '':'' en la URL tu lo das Pero en este caso encuentra dos puntos en la URL que le da en el valor de la cadena de consulta ReturnPath
, que lo engaña; por lo tanto, su ''~ /'' no se resuelve.
La solución es que debe codificar URL con el valor ReturnPath
que escapa del '':'' 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 otra persona) nunca use Uri.ToString
porque brinda una versión de la URL más humana y legible para los humanos, no es necesariamente una correcta (desvela las cosas). En su lugar, usa Uri.AbsoluteUri, como por ejemplo:
Response.Redirect("~/Login.aspx?ReturnPath=" + Server.UrlEncode(Request.Url.AbsoluteUri));