J'ai une application mvc avec le bloc suivant à l'intérieur dans web.config: Donc, si un utilisateur demande une page et une autorisation échoue, ils seront redirigés vers ~ / Login. P> C'est bien et j'en ai besoin pour la plupart de mes contrôleurs. Cependant, j'ai un contrôleur que j'aimerais contourner cette règle. Comment puis-je autoriser des contrôleurs spécifiques à ignorer cette règle? P> Mon problème est que dans mon application MVC (qui comporte plusieurs contrôleurs), j'ai un certain contrôleur qui héberge une interface de repos (non destinée à l'utilisation du navigateur). Étant donné que ce contrôleur n'est pas destiné à la consommation de navigateur, je ne veux pas que cela renvoie une page de connexion complète, (ou quelle que soit la page, juste des cordes ou des vues partielles.) P> Notez que je ' m Utilisation des attributs personnalisés [Autoriser ...] sur mes actions, et lorsque ceux-ci échouent, ils redirigent vers une action d'erreur - mais, malheureusement, mon action d'erreur (qui renvoie une chaîne courte) est redirigée vers la connexion Page EM> En raison de ce paramètre de configuration! P> Je suis étourdi à essayer de comprendre cela, qu'est-ce que je fais mal? Je peux fournir plus de détails si nécessaire. P> p>
3 Réponses :
Ajoutez les éléments suivants après votre système System.Web dans web.config: Ceci permettra aux utilisateurs non authentifiés, accès à "/ home" et donc à toutes les actions sur le homécontrôleur. P > p>
Je n'aime pas l'idée de mettre cela dans web.config, car c'est quelque chose que je ne veux pas pouvoir oublier accidentellement de déployer ou d'écraser accidentellement. Mais cela pourrait être une bonne approche dans d'autres situations, merci.
Vous pouvez étendre la classe AuthorizeAreTtribute et remplacer le guéronauthorizeRequest, vous voudrez peut-être renvoyer un code d'état HTTP interdit plutôt qu'un message personnalisé.
public class CustomAuthorizationAttribute : AuthorizeAttribute { protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) { // You need to set this action result to something other than a HttpUnauthorizedResult, // this result will cause the redirection to the login page // Forbidden request... does not redirect to login page // filterContext.Result = new HttpStatusCodeResult(403); filterContext.Result = new ErrorActionResult { ErrorMessage = "Unauthorized Access" }; } } public class ErrorActionResult : ActionResult { public string ErrorMessage { get; set; } public override void ExecuteResult(ControllerContext context) { context.HttpContext.Response.Write(this.ErrorMessage); } }
Vous avez défini mon problème tête sur: le retour d'un 401 non autorisé lui faisait rediriger. L'utilisation interdite semble être une bonne solution de contournement, bien que d'être honnête, je préférerais un utilisateur «non autorisé» que «interdit» dans ce cas. Mais je vais simplement utiliser interdit.
Phil Haack a un poteau de blog assez approfondi sur ce sujet exact: Empêchez la page de connexion d'authentification des formulaires Rediriger lorsque vous ne le souhaitez pas p>
Héritez-vous d'autoriserizeattribute ou de mise en œuvre de iAuthorizationFilter
Héritage de l'autoraeattribute.