Estoy utilizando un atributo de autenticación en algunas de mis acciones en una página asp.net mvc para derivar personas a una pantalla de inicio de sesión si no se han autenticado. Mi problema es devolverlos a la página de referencia después de que hayan iniciado sesión. Solo estaba haciendo un seguimiento de la acción de referencia y el controlador de referencia, pero eso se vuelve problemático cuando también necesito hacer un seguimiento de algunos parámetros. ¿Hay algún ingenioso truco construido sobre el cual no sé?Volver a la página de referencia
Respuesta
En caso de que esté utilizando FormsAuthentication, cuando ASP.NET redirige al usuario a la página de inicio de sesión, la URL tiene la siguiente apariencia:
http://www.mysite.com/Login?ReturnUrl=/Something
atributo de acción de la forma de la conexión debe tener el mismo parámetro ReturnUrl (ya sea de entrada como oculto o como parte de Url) de modo que FormsAuthentication puede recogerlo y redirigir, por ejemplo,
<form action="Login?ReturnUrl=<%=Html.AttributeEncode(Request.QueryString["ReturnUrl"]) %>"></form>
o
<form><input type="hidden" name="ReturnUrl" id="ReturnUrl" value="<%=Html.AttributeEncode(Request.QueryString["ReturnUrl"])"%> /></form>
Lo que hice para lograr ese resultado podría ser exagerar, y me gustaría ver algunos otros métodos también. Sin embargo, aquí está mi código.
Tenga en cuenta que está usando Moq para burlarse de un contexto ... Y, aún no he hecho nada con la cadena de consulta (mis rutas no contienen ninguna cadena de querys).
var urlReferrer = Request.UrlReferrer;
if (urlReferrer != null)
{
var url = "~" + Server.UrlDecode(urlReferrer.PathAndQuery);
// get routecollection
var routeCollection = new RouteCollection();
GlobalApplication.RegisterRoutes(routeCollection);
// mcok context
var context = new Mock<HttpContextBase>();
var request = new Mock<HttpRequestBase>();
context.Expect(ctx => ctx.Request).Returns(request.Object);
// mock request
// TODO: convert querystring to namevaluecollection
// now it's just stripped
if (url.IndexOf('?') > 0)
{
url = url.Substring(0, url.IndexOf('?'));
}
var mock = Mock.Get(context.Object.Request);
// TODO: insert namevaluecollection of querystring
mock.Expect(req => req.QueryString).Returns(new NameValueCollection());
mock.Expect(req => req.AppRelativeCurrentExecutionFilePath).Returns(url);
mock.Expect(req => req.PathInfo).Returns(string.Empty);
// get routedata with mocked context
var routeData = routeCollection.GetRouteData(context.Object);
var values = routeData.Values;
return RedirectToAction(routeData.Values["action"].ToString(), values);
}
Como ya he dicho, es tal vez un poco excesivamente complicada :)
siempre debe asegurarse de que la URL de referencia está dentro de su dominio y una cadena plausible que podrían estar viniendo. De lo contrario, esto tiene el potencial de ser utilizado con flash u otras tecnologías del lado del cliente para hacer cosas como la división de respuesta u otros ataques conocidos y desconocidos.
El referer HTTP es una entrada del usuario, y debe ser validada como cualquier otra.
- 1. Volver a la página anterior
- 2. volver a la página anterior
- 3. ¿Volver a cargar hojas de estilo CSS sin volver a cargar la página?
- 4. ¿Cómo volver a cargar un div sin volver a cargar toda la página?
- 5. C# ASP.NET MVC Volver a la página anterior
- 6. JavaScript para volver a cargar la página como solicitud GET
- 7. volver a cargar la página en el teléfono
- 8. ActionResult volver a la página que lo llamó
- 9. cómo forzar a google a volver a indexar una página
- 10. Enviando usuario de nuevo a la página de referencia
- 11. Jquery Mobile - Detectar actualización de página - Volver a la página de inicio
- 12. estado del coto de página para volver a visitar botón
- 13. Zend Framework: Obtenga la página de referencia?
- 14. cómo cambiar la URL en la barra de direcciones sin volver a cargar la página
- 15. Cómo volver a cargar una página JSF desde un ValueChangeEvent?
- 16. Actualizar (volver a cargar) una página usando jQuery?
- 17. actualización de la página del botón Volver atrás Chrome: ASP.net
- 18. RESTeasy y Volver a una página JSP con un modelo
- 19. ¿Por qué la casilla de verificación permanece activada al volver a cargar la página?
- 20. ¿Volver a la confirmación local?
- 21. jquery necesita volver a enlazar eventos en la página parcial de devolución de datos
- 22. ¿Cómo volver a la página de redireccionamiento después del inicio de sesión (codeigniter)?
- 23. ¿Cómo mantener viva la sesión sin tener que volver a cargar la página?
- 24. Actualizar la URL del navegador sin tener que volver a cargar la página
- 25. ¿Cómo obtengo flash para volver a cargar la página HTML principal en la que está incrustado?
- 26. UpdatePanel parece volver a codificar los caracteres en el título de la página?
- 27. Volver a cargar la página después de enviarla en iframe (javascript/jquery)
- 28. Cómo volver a cargar la página cuando se presiona atrás, después de un pushState?
- 29. ¿Cómo obtener una UITableview para ir al inicio de la página al volver a cargar?
- 30. Volver a cargar la página después de que se muestre el mensaje, jQuery
Al igual que un comentario adicional, también uso el código anterior para modificar algunos de los valores de los datos de la ruta. – Casper