如何判断属性调用是否源自Controller vs. Action

时间:2013-09-30 04:45:40

标签: asp.net-mvc action-filter

调用动作过滤器时,有没有办法确定此调用是否来自在控制器级别或操作级别应用的属性?

我需要为所有动作方法运行myAttribute。但是,Delete操作方法是使用过滤器专门注释的,因此myAttribute被调用两次。我需要来自Controller的调用什么都不做,或者在这种情况下可能做不同的事情。

在没有实际从控制器中删除[myAttribute]的情况下,有没有这样做呢?

[myAttribute]
public class HomeController
{
    public ViewResult Index()
    {
    }

    public ViewResult View()
    {
    }

    public ViewResult Edit()
    {
    }

    [myAttribute]
    public ViewResult Delete()
    {

    }
}

我正在使用这些操作过滤器来授权用户。用户可以访问控制器,但如果某个方法特别需要权限(通过在其上方使用[myAttribute]),则控制器级访问权限不足,并且应在用户权限中明确提及该操作。

1 个答案:

答案 0 :(得分:2)

不是解决方案, 您需要了解的是,属性旨在仅用于Annotation来定义Behavior。 此外,当您在Controller上应用Filter属性时,它实际上意味着应用控制器中的所有ActionMethods

我的建议是,再创建一个FilterAttribute,其中包含与您的Delete方法相关的特定工作,并使用它来装饰您的方法。