Asp MVC [Autoriser] pour renvoyer un article au lieu d'un obtenir
-
05-07-2019 - |
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");
}
}
}
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"/>