pestaƱa parametros nueva net mvc asp _blank c# asp.net response.redirect

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));