J'ai écrit un filtre d'action qui détecte une nouvelle session et tente de rediriger l'utilisateur vers une page pour l'informer que cela s'est produit. Le seul problème est que je n'arrive pas à comprendre comment le rediriger vers une combinaison contrôleur/action dans un filtre d'action. Je peux au contraire seulement comprendre comment rediriger vers une URL spécifiée. Existe-t-il un moyen direct de rediriger vers un contrôleur/une combinaison d'actions dans un filtre d'action dans mvc2?Redirection vers le contrôleur spécifié et action dans le filtre d'action mvc asp.net
Répondre
Plutôt que d'obtenir une référence à HttpContent et rediriger directement dans le ActionFilter vous pouvez définir le résultat du contexte de filtre pour être un RedirectToRouteResult. C'est un peu plus propre et meilleur pour les tests.
Comme ceci:
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if(something)
{
filterContext.Result = new RedirectToRouteResult(
new RouteValueDictionary {{ "Controller", "YourController" },
{ "Action", "YourAction" } });
}
base.OnActionExecuting(filterContext);
}
Appel à l'aide RedirectToActionthis overload:
protected internal RedirectToRouteResult RedirectToAction(
string actionName,
RouteValueDictionary routeValues
)
dans les filtres d'action, l'histoire est un peu différent. Pour un bon exemple, voir ici:
http://www.dotnetspider.com/resources/29440-ASP-NET-MVC-Action-filters.aspx
C'est un bon endroit pour chercher pour rediriger dans un filtre d'action (+1), mais je veux vraiment spécifier le combo contrôleur/action à mon filtre. Je ne voulais pas non plus simplement concaténer les chaînes en cas de routage personnalisé, mais j'ai fini par trouver quelque chose qui pourrait m'aider. Vois ma réponse. –
EDIT: La question initiale était sur la façon de détecter la session fermeture de session, puis rediriger automatiquement vers un contrôleur spécifique et action. La question s'est avérée beaucoup plus utile que sa forme actuelle cependant.
J'ai fini par utiliser une combinaison d'éléments pour atteindre cet objectif.
La première est la session expire filter found here. Ensuite, je voulais spécifier le contrôleur/action combo pour obtenir une URL de redirection, ce que j'ai trouvé beaucoup d'exemples de here. En fin de compte, je suis venu avec ceci:
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 vous voulez rendre cela plus testable, je crois que vous pouvez simplement définir filterContext.Result à un RedirectResult, plutôt que de rediriger explicitement. Le résultat net est que MVC effectuera toujours la redirection, mais de cette façon, vous pouvez écrire des tests unitaires qui invoquent manuellement OnActionExecuting(), puis s'affirmer contre filterContext.Result. –
- 1. ASP.NET MVC: Redirection vers une action sur une application différente
- 2. Redirection globale ASP.NET MVC
- 3. asp.net MVC vue partielle contrôleur action
- 4. Comment faire pour rediriger le filtre vers une autre action?
- 5. IIS - Redirection ASP.NET MVC
- 6. Pourquoi le contrôleur ContentResult dans ASP.NET MVC renvoie UTF-16 lorsque UTF-8 est spécifié?
- 7. Redirection ASP.NET dans un contrôleur de base
- 8. asp.net- mvc passer des variables d'un contrôleur (action) à un autre contrôleur (action)
- 9. Classe ASP.NET MVC représentant un ensemble contrôleur + action?
- 10. ASP.NET MVC - Rediriger vers un contrôleur/une action en transmettant des données
- 11. Route vers le contrôleur
- 12. thunderdome action invoker asp.net mvc
- 13. Tests unitaires Redirection ASP.NET MVC
- 14. Comment faire pour avoir le dossier et le contrôleur avec le même nom dans ASP.NET MVC?
- 15. Unité test d'une action du contrôleur Asp.net MVC
- 16. ASP.Net MVC ViewUserControl avec le contrôleur utilisant MVC 1.0
- 17. ASP.NET MVC: Comment gérer TempData cross-action et ViewData
- 18. Comment puis-je obtenir le nom de la route dans le contrôleur dans ASP.NET MVC?
- 19. Le contrôleur Spring-MVC redirige vers la page "précédente"?
- 20. Liste des modèles ASP.NET MVC dans le contrôleur
- 21. MVC Index page et filtre
- 22. 'Contrôleur invalide spécifié' Depuis le passage à la structure modulaire
- 23. Asp.Net MVC: Les attributs de filtre au niveau du contrôleur sont-ils pris en charge?
- 24. Plusieurs actions sur le même contrôleur et affichage dans asp.net MVC
- 25. MVC et OpenID Redirection Problèmes
- 26. Comment poster un formulaire avec le contrôleur MVC?
- 27. Rediriger vers l'URI externe à partir du contrôleur ASP.NET MVC
- 28. Synchronisation d'une action ASP.NET MVC
- 29. ASP.NET MVC redirection vers une page d'accès refusé à l'aide d'un fournisseur rôle personnalisé
- 30. Asp.Net formulaire MVC, avec des paramètres inconnus pour le contrôleur
Ma tête me faisait mal, maintenant ça ne l'est pas. Merci – jolySoft
Ceci est une réponse beaucoup plus appropriée que le mien. C'était ma première question sur MVC et aujourd'hui je répondrais comme ça. –