2009-07-10 60 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属性,因为我找不到任何方法从继承的类中删除属性。

回答

5

由于它被标记为继承,所以在这种情况下可以做的事情并不多(因为您不控制通过反射检查属性的代码)。实现你自己的属性似乎是最实际的选择。

使用MVC,你也可以经常使用覆盖(On*方法)实现相同的功能,这可能值得研究。

0

如果基类型需要授权,那么所有的子类型都应该要求授权。我认为你应该继承不同的类型,但是一个解决方法是声明你自己的AthorizeAttribute适用于这个特定的实例。