2009-10-08 13 views
9

Ceci est probablement une question novice mais;Attributs personnalisés sur ActionResult

Supposons que j'aie un ActionResult auquel je ne souhaite accorder l'accès qu'après les heures d'ouverture. Disons aussi que je veux décorer mon ActionResult avec un attribut personnalisé.

Ainsi, le code pourrait ressembler à quelque chose;

[AllowAccess(after="17:00:00", before="08:00:00")] 
public ActionResult AfterHoursPage() 
{ 
    //Do something not so interesting here; 

    return View(); 
} 

Comment exactement aurais-je obtenir ce travail?

J'ai fait quelques recherches sur la création d'attributs personnalisés, mais je pense que je manque le peu sur la façon de les consommer.

S'il vous plaît, supposez que je ne sais pas grand chose à propos de leur création et de leur utilisation.

Répondre

14

Essayez cette (non testé):

public class AllowAccessAttribute : AuthorizeAttribute 
{ 
    public DateTime before; 
    public DateTime after; 

    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
     if (httpContext == null) 
      throw new ArgumentNullException("httpContext"); 

     DateTime current = DateTime.Now; 

     if (current < before | current > after) 
      return false; 

     return true; 
    } 
} 

Plus d'infos ici: http://schotime.net/blog/index.php/2009/02/17/custom-authorization-with-aspnet-mvc/

+0

Merci Robert. C'est une bonne information mais j'ai besoin de re-poser la question d'une manière différente. :) Mais cela sera utile très bientôt. – griegs

+0

Ne devrait-il pas être (courant après) au lieu de ce qui est exprimé dans la réponse? La différence étant binaire ou vs. régulière ou! –

2

Ce que vous cherchez dans .net mvc sont des filtres d'action.

Vous devrez étendre la classe ActionFilterAttribute et implémenter la méthode OnActionExecuting dans votre cas. Voir: http://www.asp.net/learn/mvc/tutorial-14-cs.aspx pour une introduction décente aux filtres d'action.

également pour quelque chose, voir un peu similaire: ASP.NET MVC - CustomeAuthorize filter action using an external website for loggin in the user

+0

Pour des questions liées aux autorisations, vous * devez * sous-type AuthorizeAttribute , pas ActionFilterAttribute. Voir http://blogs.teamb.com/craigstuntz/2009/09/09/38390/ –

+0

+1 Merci @Dean et @Craig – griegs

Questions connexes