是否可以覆盖在特定方法上在控制器级别应用的属性?

时间:2009-07-31 15:00:58

标签: asp.net-mvc attributes authorization

如果我在控制器级别应用了授权属性,是否可以在该控制器上的某个方法上覆盖它?

由于

詹姆斯

2 个答案:

答案 0 :(得分:1)

这取决于你想要什么样的“覆盖”。您无法删除该类中的属性,但您可以再次将该属性添加到该方法中,以使限制更具限制性。

更新以回应评论。首先,制作自己的AuthorizeAttribute有点危险。 AuthorizeAttribute包含与缓存属性交互的代码,以确保缓存无法向未授权用户提供受保护内容。您至少应该对现有的AuthorizeAttribute进行子类型,而不是创建全新的内容。但是,通常,最好使用现有的AuthorizeAttribute,并通过创建新的/查找现有的ASP.NET成员资格提供程序来专门授权。

我认为对一个“覆盖”控制器上的过滤器的动作进行过滤是不好的设计。但是,您可以将控制器上的过滤器设计更改为不需要对某个名称的操作进行授权。例如,您可以覆盖AuthorizeAttribute.AuthorizeCore方法来测试操作名称,方法与现有方法测试用户名和角色的方式相同。请仔细注意此方法中有关线程安全的注释。

答案 1 :(得分:0)

我不确定这是否是完全相同的问题,但它可能会有所帮助......

How to make ActionFilter on action method take precedence over same ActionFilter on controller