2009-10-08 18 views
9

Esta es probablemente una pregunta para novatos;Atributos personalizados en ActionResult

Digamos que tengo un ActionResult al que solo deseo otorgar acceso después de horas.

Digamos también que quiero decorar mi ActionResult con un atributo personalizado.

Así que el código podría ser algo así como;

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

    return View(); 
} 

Cómo exactamente habría que conseguir que esto funcione?

He hecho algunas investigaciones sobre la creación de atributos personalizados, pero creo que me falta algo sobre cómo consumirlos.

Por favor, supongo que no sé casi nada acerca de cómo crearlos y usarlos.

Respuesta

14

probar este (no probado):

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

Más información aquí: http://schotime.net/blog/index.php/2009/02/17/custom-authorization-with-aspnet-mvc/

+0

Gracias Robert. Esta es una gran información, aunque necesito volver a hacer la pregunta de otra manera. :) Pero esto será útil muy pronto ahora. – griegs

+0

¿No debería ser (actual después) en lugar de lo que se expresa en la respuesta? ¡La diferencia es binaria o contra regular o! –

2

Lo que estás buscando en .net mvc son filtros de acción.

Deberá extender la clase ActionFilterAttribute e implementar el método OnActionExecuting en su caso.

Ver: http://www.asp.net/learn/mvc/tutorial-14-cs.aspx para una introducción decente a los filtros de acción.

también algo sede ligeramente similar: ASP.NET MVC - CustomeAuthorize filter action using an external website for loggin in the user

+0

Para preocupaciones relacionadas con la autorización, que * debe * subtipo AuthorizeAttribute , no ActionFilterAttribute. Ver http://blogs.teamb.com/craigstuntz/2009/09/09/38390/ –

+0

+1 Gracias @Dean y @Craig – griegs

Cuestiones relacionadas