Пользовательские атрибуты на ActionResult - PullRequest
9 голосов
/ 08 октября 2009

Это, вероятно, вопрос новичка, но;

Допустим, у меня есть ActionResult, к которому я хочу предоставить доступ только в нерабочее время.

Скажем также, что я хочу украсить свой ActionResult пользовательским атрибутом.

Так что код может выглядеть примерно так:

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

    return View();
}

Как точно я бы заставил это работать?

Я провел некоторые исследования по созданию пользовательских атрибутов, но мне кажется, что мне не хватает того, как их использовать.

Пожалуйста, предположите, что я почти ничего не знаю о создании и использовании их.

Ответы [ 2 ]

14 голосов
/ 08 октября 2009

Попробуйте это (не проверено):

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

Больше информации здесь: http://schotime.net/blog/index.php/2009/02/17/custom-authorization-with-aspnet-mvc/

2 голосов
/ 08 октября 2009

То, что вы ищете в .net mvc, это фильтры действий.

Вам потребуется расширить класс ActionFilterAttribute и реализовать метод OnActionExecuting в вашем случае.

См: http://www.asp.net/learn/mvc/tutorial-14-cs.aspx для приличного знакомства с фильтрами действий.

Также о чем-то немного похожем см .: ASP.NET MVC - действие фильтра CustomeAuthorize с использованием внешнего веб-сайта для входа в систему пользователя

...