Удаление унаследованного атрибута в .net - PullRequest
5 голосов
/ 10 июля 2009

Я получил контроллер ASP.NET MVC, как это

[Authorize]
public class ObjectController : Controller
{
     public ObjectController(IDataService dataService)
     {
         DataService = dataService;
     }
     public IDataService DataService { get;set;}
}

Атрибут Authorize определен как «Inherited = true» в платформе. Поэтому, когда я делаю следующий контроллер:

public class DemoObjectController : ObjectController 
{
    public DemoObjectController(IDataService dataService)
        : base (dataService)
    {
        DataService = new DemoDataService(DataService);
    }
}

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

Полагаю, я реализую свой собственный атрибут Authorize, который не наследуется, поскольку я не могу найти способ удалить атрибут из унаследованного класса.

Ответы [ 2 ]

5 голосов
/ 10 июля 2009

Поскольку он помечен как унаследованный, в этом случае вы мало что можете сделать (поскольку вы не управляете кодом, который проверяет атрибут с помощью отражения). Реализация собственного атрибута представляется наиболее практичным вариантом.

С MVC вы также часто можете достичь той же функциональности с переопределениями (методы On*), что может стоить изучить.

0 голосов
/ 10 июля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...