2009-07-30 75 views
1

Je souhaite utiliser [Authorize (Roles = "Admin")] les balises sur mes méthodes de contrôleur.Asp MVC [Autoriser] pour renvoyer un message au lieu d'un message Get

Si un utilisateur n'est pas un administrateur, je voudrais retourner cet utilisateur à mon écran de connexion. Le comportement par défaut de renvoi de l'utilisateur à ma page de connexion est de rediriger mon utilisateur vers "Compte/Connexion" à l'aide d'une URL Get.

Le problème est que les sous-pages de mon site Web sont toutes les vues partielles actualisées par les appels Ajax, y compris mon écran de connexion.

Donc ma question est: Est-il possible de modifier la classe ci-dessous pour retourner une redirection de poste au lieu d'une redirection get?

public class AjaxAuthorizeAttribute : AuthorizeAttribute 
{ 
    override public void OnAuthorization(AuthorizationContext filterContext) 
    { 
    base.OnAuthorization(filterContext); 
    // Only do something if we are about to give a HttpUnauthorizedResult and we are in AJAX mode. 
    if (filterContext.Result is HttpUnauthorizedResult && filterContext.HttpContext.Request.IsAjaxRequest()) 
    { 
     filterContext.Result = new RedirectResult("../Account/Login"); 
    } 
    } 
} 

Répondre

1

Apparemment, le problème résolu seemes en retirant le

[Acceptverbs(HttpVerbs.Post)] 

attribut sur la méthode de connexion de mon contrôleur de compte.

De cette façon, nous n'avons même pas de passer outre la AuthorizeAttribute

:)

+2

Vous pouvez toujours utiliser l'attribut AcceptVerbs: [AcceptVerbs (HttpVerbs.Get | HttpVerbs.Post)] – keithm

0

J'ai trouvé une solution dans Microsoft.WebPages.PreApplicationStartCode.SetupFormsAuthentication()

Il suffit d'ajouter un AppSetting nommé "loginUrl" pour spécifier l'action de connexion:

<add key="loginUrl" value="~/Account/LogOn"/>