Использование атрибута для преждевременного возврата из метода - PullRequest
0 голосов
/ 16 апреля 2011

Можно ли создать атрибут, который проверяет условие и затем на основе этого условия либо останавливать выполнение декорированного метода, либо позволить декорированному методу продолжать выполнение?

А теперь очевидный вопрос.Если так, то как?Если нет, то есть ли обходной путь, который стоит проверить?

Общая цель этого атрибута состоит в том, чтобы в ASP.NET MVC проверить, авторизован ли пользователь, и либо вернуть определенный JsonResult (определенныйв атрибуте), если они не авторизованы или пусть оформленный метод продолжает выполняться.Очевидная проблема, которую я вижу, когда это возможно, заключается в том, что если действие контроллера отличается от ActionResult или JsonResult, существует вероятность ошибки во время выполнения.

Ответы [ 2 ]

2 голосов
/ 16 апреля 2011

В вашей конкретной ситуации вы можете использовать фильтр ASP.NET MVC , чтобы делать то, что вам нужно. Расширьте свой атрибут AuthorizeAttribute .

public class MustHaveFooAccessAttribute : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        // Return true or false after checking authorization
    }
}
1 голос
/ 16 апреля 2011

Это невозможно при использовании атрибутов - атрибуты разрешаются во время компиляции.Они не выполняются во время выполнения.

Особое поведение, которым атрибуты "control" управляются посредством отражения.

...