2009-10-08 13 views
9

Jest to prawdopodobnie pytanie nowicjusza, ale;Niestandardowe atrybuty na ActionResult

Załóżmy, że mam ActionResult, że chcę zezwolić na dostęp tylko po godzinach.

Powiedzmy również, że chcę udekorować moje ActionResult niestandardowym atrybutem.

Kod może wyglądać podobnie;

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

    return View(); 
} 

Jak dokładnie chciałbym uzyskać to do pracy?

Zrobiłem kilka badań na temat tworzenia atrybutów niestandardowych, ale myślę, że brakuje mi trochę, jak je konsumować.

Proszę przyjąć, że nie wiem prawie nic o ich tworzeniu i używaniu.

Odpowiedz

14

Try This (niesprawdzone):

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

Więcej informacji tutaj: http://schotime.net/blog/index.php/2009/02/17/custom-authorization-with-aspnet-mvc/

+0

Dziękuję Robert. Jest to świetna informacja, ale muszę ponownie zadać to pytanie w inny sposób. :) Ale teraz przyda się to naprawdę szybko. – griegs

+0

Czy nie powinno być (aktualne po) zamiast tego, co jest wyrażone w odpowiedzi? Różnica jest binarna lub regularna lub! –

2

Czego szukasz w .net mvc to Filtry akcji.

Będziesz musiał rozszerzyć klasę ActionFilterAttribute i zaimplementować w swoim przypadku metodę OnActionExecuting.

Zobacz: http://www.asp.net/learn/mvc/tutorial-14-cs.aspx za przyzwoite wprowadzenie do filtrów akcji.

także na coś nieco podobnego patrz: ASP.NET MVC - CustomeAuthorize filter action using an external website for loggin in the user

+0

Dla obaw związanych Autoryzacji, * musisz * podtypu AuthorizeAttribute , a nie ActionFilterAttribute. Zobacz http://blogs.teamb.com/craigstuntz/2009/09/09/38390/ –

+0

+1 Dzięki @Dean i @Craig – griegs

Powiązane problemy