2008-09-21 5 views
2

Je cherche à définir l'action résultat à partir d'un IAuthorizationFilter défaillant. Cependant, je ne sais pas comment créer un objet ActionResult depuis l'intérieur du filtre. Le contrôleur ne semble pas être accessible depuis l'intérieur du filtre, donc mon View ("SomeView") habituel ne fonctionne pas. Existe-t-il un moyen d'obtenir le controler ou bien une autre façon de créer un action-action car il ne semble pas être instanciable?Résultat de la recherche pour IAuthorizationFilter

ne fonctionne pas:

[AttributeUsage(AttributeTargets.Method)] 
    public sealed class RequiresAuthenticationAttribute : ActionFilterAttribute, IAuthorizationFilter 
    { 
    public void OnAuthorization(AuthorizationContext context) 
    { 
     if (!context.HttpContext.User.Identity.IsAuthenticated) 
     { 
      context.Result = View("User/Login"); 
     } 
    } 
} 

Répondre

1

Vous pouvez instancier directement ActionResult approprié, puis définissez sur le contexte. Par exemple:

public void OnAuthorization(AuthorizationContext context) 
{ 
    if (!context.HttpContext.User.Identity.IsAuthenticated) 
    { 
     context.Result = new ViewResult { ViewName = "Whatever" }; 
    } 
} 
2

Vous devriez regarder la mise en œuvre de IAuthorizationFilter qui vient avec le framework MVC, AuthorizeAttribute. Si vous utilisez l'authentification par formulaire, vous n'avez pas besoin de définir le résultat sur Utilisateur/Connexion. Vous pouvez déclencher une réponse d'état HTTP 401 et ASP.NET redirigera vers la page de connexion pour vous.

Le seul problème avec la définition du résultat pour user/login est que la barre d'adresse de l'utilisateur n'est pas mise à jour, donc ils seront sur la page de connexion, mais l'URL ne correspondra pas. Pour certaines personnes, ce n'est pas un problème. Mais certaines personnes souhaitent que l'URL de leur site corresponde à ce que l'utilisateur voit dans leur navigateur.

Questions connexes