Résultat non autorisé dans les requêtes ajax
J'ai une application avec de nombreuses ajax actions (mise en œuvre à l'aide de JQuery.ajax), qui renvoie du JSON ot html. Certains d'entre eux doivent être accessibles qu'aux utilisateurs autorisés, et j'ai décoré avec [Authorize]
attribut. Pour ne pas les actions ajax, si l'utilisateur n'est pas autorisé au système redirige vers la page de login (configuré dans le web.config).
Mais ce n'est pas applicable pour les actions ajax, parce que si l'utilisateur est autorisé - il charger la page, après que le cookie expire et il n'est pas autorisé, et au lieu de bloc html, qui devrait remplacer la vieille, il me page de connexion à l'intérieur du bloc.
Je sais que je peux résoudre ce problème manuellement, par exemple supprimer [Autoriser] attribut, et de retour spécial json/html vierge, si l'utilisateur n'est autorisé. Mais je n'aime pas cette solution, car j'ai besoin de refaire toutes mes actions et fonctions ajax. Je veux solution globale, qui me permettent de ne pas réécrire mes actions (peut être personnalisé autoriser attribut, ou certains http non autorisée résultat de la gestion personnalisée).
Je veux renvoyer le code d'état, si la demande est ajax, et rediriger vers la page de connexion, si la demande n'est pas ajax.
source d'informationauteur Evgeny Levin
Vous devez vous connecter pour publier un commentaire.
Ajouter un Application_EndRequest gestionnaire de votre code mondial.asax.cs qui modifie toute erreur 302 (redirection vers la page de login) à un 401 (non autorisé) d'erreur pour une requête AJAX. Cela vous permettra tout simplement de laisser vos actions de contrôleur comme ils sont et gérer la redirection (vous ne pouvez que vous demandez à l'utilisateur de se connecter à nouveau si elles ne sont pas actuellement) par le client.
Puis dans votre _Layout.cshtml fichier ajouter un global AJAX gestionnaire d'erreur qui redirige vers votre login d'action quand il fait une réponse 401.
Vous pouvez également essayer certaines des techniques décrites dans le Phil Haack blog, Prévenir les Formulaires de Connexion de l'Authentification de la Page de Redirection Lorsque Vous Ne Voulez pas qu'Il
Vous ne pas avoir à réécrire toutes vos actions, il suffit de créer un filtre personnalisé pour remplacer le builtin
Authorize
filtre.D'autres personnes l'ont fait avant
asp.net mvc [handleerror] [autoriser] avec JsonResult?
Vous pouvez vérifier pour la Demande.IsAjaxRequest() méthode d'extension et de prendre des mesures spécifiques si c'est vrai.
Peut-être l'ouverture de votre session d'action dans votre AccountController (ou partout où vous en avez une) peut retourner un résultat différent si
Request.IsAjaxRequest()
était vrai.Cela signifie que si un appel AJAX dans un centre agréé de l'action échoue autorisation, vous devriez être en mesure de retourner une réponse appropriée via l'ouverture de session de l'action..
par exemple
Ensuite, vous ne devriez pas besoin de faire une réécriture majeure