2009-10-08 25 views
9

Questa è probabilmente una domanda da principianti ma;Attributi personalizzati su ActionResult

Diciamo che ho un ActionResult a cui voglio solo accedere dopo ore.

Diciamo anche che voglio decorare il mio ActionResult con un attributo personalizzato.

Quindi il codice potrebbe sembrare qualcosa di simile;

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

    return View(); 
} 

Come esattamente dovrei ottenere questo lavoro?

Ho fatto qualche ricerca sulla creazione di attributi personalizzati, ma penso che mi manca il bit su come consumarli.

Supponiamo di non sapere praticamente nulla sulla creazione e sul loro utilizzo.

risposta

14

Prova questa (non testata):

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; 
    } 
} 

Maggiori informazioni qui: http://schotime.net/blog/index.php/2009/02/17/custom-authorization-with-aspnet-mvc/

+0

Grazie Robert. Questa è un'ottima informazione anche se ho bisogno di ri-chiedere la domanda in un modo diverso. :) Ma questo tornerà utile a breve ora. – griegs

+0

Non dovrebbe essere (corrente dopo) invece di ciò che è espresso nella risposta? La differenza è binaria o normale o! –

2

Cosa stai cercando in .net mvc sono filtri azione.

Sarà necessario estendere la classe ActionFilterAttribute e implementare il metodo OnActionExecuting nel tuo caso.

Vedere: http://www.asp.net/learn/mvc/tutorial-14-cs.aspx per un'introduzione decente ai filtri azione.

anche per qualcosa di vedere un po 'simile: ASP.NET MVC - CustomeAuthorize filter action using an external website for loggin in the user

+0

Per preoccupazioni autorizzazioni relative, si * deve * sottotipo AuthorizeAttribute , non ActionFilterAttribute. Vedi http://blogs.teamb.com/craigstuntz/2009/09/09/38390/ –

+0

+1 Grazie @Dean e @Craig – griegs

Problemi correlati