Comment créer un attribut personnalisé pour étendre l'attribut Authorize existant dans MVC?asp.net mvc Ajout à l'attribut AUTHORIZE
Répondre
Dérivez votre classe de AuthorizeAttribute. Remplacer la méthode OnAuthorization. Ajoutez et configurez CacheValidationHandler.
public void CacheValidationHandler(HttpContext context,
object data,
ref HttpValidationStatus validationStatus)
{
validationStatus = OnCacheAuthorization(new HttpContextWrapper(context));
}
public override void OnAuthorization(AuthorizationContext filterContext)
{
if (filterContext == null)
{
throw new ArgumentNullException("filterContext");
}
if (AuthorizeCore(filterContext.HttpContext))
{
... your custom code ...
SetCachePolicy(filterContext);
}
else if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
{
// auth failed, redirect to login page
filterContext.Result = new HttpUnauthorizedResult();
}
else
{
... handle a different case than not authenticated
}
}
protected void SetCachePolicy(AuthorizationContext filterContext)
{
// ** IMPORTANT **
// Since we're performing authorization at the action level, the authorization code runs
// after the output caching module. In the worst case this could allow an authorized user
// to cause the page to be cached, then an unauthorized user would later be served the
// cached page. We work around this by telling proxies not to cache the sensitive page,
// then we hook our custom authorization code into the caching mechanism so that we have
// the final say on whether a page should be served from the cache.
HttpCachePolicyBase cachePolicy = filterContext.HttpContext.Response.Cache;
cachePolicy.SetProxyMaxAge(new TimeSpan(0));
cachePolicy.AddValidationCallback(CacheValidationHandler, null /* data */);
}
ok, mais comment puis-je rediriger correctement à la dernière page? – zsharp
Comment puis-je faire en sorte que cela fonctionne avec les rôles? Cela fonctionne bien maintenant mais semble que les rôles ne fonctionnent pas. De plus, AuthorizeCore continue de retourner false même lorsque l'utilisateur est authentifié, ce qui signifie que SetCachePolicy() n'est jamais exécuté. –
@Nick - J'ai depuis blogué sur l'amélioration des aspects de gestion de cache: http://farm-fresh-code.blogspot.com/2011/03/revisiting-custom-authorization-in.html – tvanfosson
public class CoolAuthorizeAttribute : AuthorizeAttribute
{
}
Vous n'avez pas besoin d'étendre cet attribut, web.config est suffisant. S'il vous plaît lire à propos de forms Element for authentication. Portez votre attention sur defaultUrl. C'est quelque chose dont vous avez besoin.
<system.web>
<authentication mode="Forms">
<forms defaultUrl="YourUrlGoesHere"/>
</authentication>
</system.web>
Je suggère si vous voulez juste étendre le AuthorizeAttribute actuel et ajouter votre propre autorisation en plus de cela, au lieu de passer outre OnAuthorization simplement remplacer AuthorizeCore et ajoutez votre condition de MyCustomAuthorizationHolds à elle.
public class CustomAuthorizeAttribute : AuthorizeAttribute
{
// This method must be thread-safe since it is called by the thread-safe OnCacheAuthorization() method.
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
if (base.AuthorizeCore(httpContext) && MyCustomAuthorizationHolds)
return true;
return false;
}
}
- 1. Ajout à l'URL actuelle dans ASP.NET MVC
- 2. Ajout d'informations redondantes à un itinéraire MVC
- 3. Introduction à Asp.net MVC
- 4. Adhésion à ASP.net - ajout d'un rôle
- 5. Ajout d'une erreur au modèle de ma classe partielle linq à sql dans ASP.NEt MVC
- 6. Ajout de Asp.net mvc à une application Web existante Comment obtenir des options d'échafaudage
- 7. Ajout tag "active" à la liste de navigation dans une page maître mvc asp.net
- 8. De monorail à ASP.Net MVC
- 9. Ajout de références à ASP MVC Page Moteur de compilation
- 10. Ajout d'un paramètre à l'URL dans ASP MVC
- 11. Ajout dynamique de case à cocher à DataGrid dans Asp.Net
- 12. ASP.NET MVC: erreur Strange typecasing
- 13. asp.net mvc -
- 14. asp.net MVC
- 15. Ajout de la gestion des exceptions globales à ASP.NET
- 16. Ajout de contrôles dynamiquement à un UpdatePanel dans ASP.NET AJAX
- 17. Comment faire un abonnement à ASP.NET MVC?
- 18. Image équivalente à ActionLink dans ASP.NET MVC
- 19. Cases à cocher ASP.Net MVC Problème
- 20. Passer à l'information UserControl dans ASP.NET MVC
- 21. ASP.NET MVC est équivalent à l'événement Login_Error?
- 22. asp.net mvc plusieurs valeurs à acheminer
- 23. Retour Json à jQuery avec ASP.NET MVC
- 24. cases à cocher ASP.net MVC (C#)
- 25. asp.net mvc selectlist - champ à dictionnaire
- 26. ASP.NET MVC vs ASP.NET 4.0
- 27. Que faites-vous référence à ASP.NET MVC ASP.NET non?
- 28. commandes Ajout de problème d'exécution ASP.Net
- 29. ComponentNotRegisteredException Probs - ASP.NET MVC
- 30. ASP.NET MVC + Complex ViewData
S'il vous plaît ajouter plus de détails, ce que vous voulez étendre? –
pour l'instant je veux juste être en mesure de rediriger vers la bonne page plutôt que la page d'accueil par défaut. – zsharp
Vous pouvez mettre à jour votre question afin que tout le monde sache ce dont vous avez besoin. –