He escrito un filtro de acción que detecta una nueva sesión e intenta redirigir al usuario a una página que le informa que esto ha sucedido. El único problema es que no puedo descifrar cómo redirigirlo a un combo controlador/acción en un filtro de acción. En cambio, solo puedo descubrir cómo redirigir a una URL específica. ¿Hay una forma directa de redirigir a un combo controlador/acción en un filtro de acción en mvc2?Redireccionando al controlador especificado y a la acción en asp.net filtro de acción mvc
Respuesta
En lugar de obtener una referencia a HttpContent y redirigir directamente en la ActionFilter se puede establecer el resultado del contexto filtro para ser un RedirectToRouteResult. Es un poco más limpio y mejor para las pruebas.
De esta manera:
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if(something)
{
filterContext.Result = new RedirectToRouteResult(
new RouteValueDictionary {{ "Controller", "YourController" },
{ "Action", "YourAction" } });
}
base.OnActionExecuting(filterContext);
}
llamada RedirectToAction usando this overload:
protected internal RedirectToRouteResult RedirectToAction(
string actionName,
RouteValueDictionary routeValues
)
En Acción Filtros, la historia es un poco diferente. Para un buen ejemplo, ver aquí:
http://www.dotnetspider.com/resources/29440-ASP-NET-MVC-Action-filters.aspx
Eso es un buen lugar para buscar la reorientación de la acción de un filtro (1), pero realmente quiero especificar el combo controlador/acción para mi filtro. Tampoco quería simplemente concatenar cadenas en caso de enrutamiento personalizado, pero terminé encontrando algo que podría ayudar. Ver mi respuesta –
EDIT: La pregunta original sobre cómo detectar la sesión de cierre de sesión, y luego automáticamente redirigir a un controlador y acción especificada. Sin embargo, la pregunta resultó mucho más útil, ya que es la forma actual.
Terminé usando una combinación de elementos para lograr este objetivo.
Primero es el filtro de expiración de la sesión encontrado here. Entonces, de alguna forma, quería especificar el combo controlador/acción para obtener una URL de redireccionamiento, que encontré con muchos ejemplos de here. Al final se me ocurrió esto:
public class SessionExpireFilterAttribute : ActionFilterAttribute
{
public String RedirectController { get; set; }
public String RedirectAction { get; set; }
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
HttpContext ctx = HttpContext.Current;
if (ctx.Session != null)
{
if (ctx.Session.IsNewSession)
{
string sessionCookie = ctx.Request.Headers["Cookie"];
if ((null != sessionCookie) && (sessionCookie.IndexOf("ASP.NET_SessionId") >= 0))
{
UrlHelper helper = new UrlHelper(filterContext.RequestContext);
String url = helper.Action(this.RedirectAction, this.RedirectController);
ctx.Response.Redirect(url);
}
}
}
base.OnActionExecuting(filterContext);
}
}
Si desea que esto sea más comprobable, creo que simplemente puede establecer filterContext.Result en RedirectResult, en lugar de redirigirlo explícitamente. El resultado neto es que MVC aún realizará la redirección, pero de esa manera puede escribir pruebas unitarias que invocan manualmente OnActionExecuting() y luego afirman contra filterContext.Result. –
- 1. Filtro de acción global en ASP.NET MVC
- 2. ASP.NET MVC Pass objeto de acción personalizada Filtro de Acción
- 3. ASP.Net MVC Autorización del filtro acción
- 4. Módulo HTTP frente a filtro de acción en asp.net-mvc
- 5. Minificar atributo de filtro de acción en ASP.NET MVC
- 6. Filtro de acción asíncrono en MVC 4
- 7. ASP.NET MVC enviando datos JSON a una acción de controlador
- 8. backgroundworker bloqueando la acción del controlador MVC
- 9. ASP.Net MVC: publicación de un controlador a otro (acción a acción)
- 10. ¿Cómo redirecciono al usuario a otra acción del controlador desde un filtro de acción ASP.MVC 3?
- 11. ASP.NET MVC 3: redirigir a otra acción
- 12. ASP.Net MVC 3 Acción del controlador y Abrir nueva ventana
- 13. ¿Cómo puedo redireccionar a la acción anterior en ASP.NET MVC?
- 14. ASP.NET MVC: ¿filtro de acción para configurar las variables del controlador?
- 15. asp.net acción de controlador de vista parcial MVC
- 16. ASP.NET MVC: filtro de acción de registro sin modificar el controlador
- 17. Asp.Net MVC - Sobrecarga método Acción
- 18. ASP.NET MVC acción 3 controlador de vista parcial
- 19. ASP.NET MVC métodos de acción de JavaScript
- 20. GET y POST a la misma Acción del controlador en ASP.NET MVC
- 21. ¿Cómo acceder al valor de hiddenField en la acción del controlador de devolución de mvc asp.net?
- 22. MVC Jquery vaya a la acción del controlador
- 23. ASP.NET MVC: ¿acción actual del código del controlador?
- 24. comportamiento extraño con la acción asp.net mvc filtra AttributeUsage
- 25. Configurar una ruta {arrendatario}/{controlador}/{acción}/{id} con ASP.NET MVC?
- 26. Redirigir a la acción en otro controlador
- 27. .NET MVC - Llamar a un controlador Acción desde otra acción del controlador
- 28. Redirigir a la acción en otro controlador
- 29. ruta ASP.NET MVC devolver 404 sin acción
- 30. Obteniendo el nombre del controlador y el método de acción en la vista en ASP.Net MVC
Me dolía la cabeza, ahora no es así. Gracias – jolySoft
Esta es una respuesta mucho más apropiada que la mía. Esta fue mi primera pregunta sobre MVC y hoy respondería de esta manera. –