2009-07-10 4 views
5

Я получил контроллер ASP.NET MVC, как этотУдаление наследуемого атрибута в .net

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

Атрибут Авторизоваться определяется как «Наследуется = истина» в рамках. Поэтому, когда я делаю следующий контроллер:

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

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

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

ответ

5

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

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

0

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

Смежные вопросы