Question

J'aimerais utiliser les balises [Authorize (Roles = "Admin")] sur les méthodes de mon contrôleur.

Si un utilisateur n'est pas un administrateur, j'aimerais retourner cet utilisateur sur mon écran de connexion. Le comportement par défaut du renvoi de l'utilisateur sur ma page de connexion est la redirection de mon utilisateur sur "Compte / Connexion". en utilisant une URL à obtenir.

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

Ma question est donc la suivante: Est-il possible de modifier la classe ci-dessous pour renvoyer une redirection post 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");
    }
  }
}
Était-ce utile?

La solution

Apparemment, le problème semble résolu en supprimant le

[Acceptverbs(HttpVerbs.Post)]

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

De cette façon, nous n'avons même pas besoin de remplacer le AuthorizeAttribute

:

Autres conseils

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"/>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top