2

当一个动作过滤器被调用时,有没有办法确定这个调用是来自控制器级别还是动作级别应用的属性?

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

无论如何都可以在不从控制器中实际删除 [myAttribute] 的情况下执行此操作吗?

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

    public ViewResult View()
    {
    }

    public ViewResult Edit()
    {
    }

    [myAttribute]
    public ViewResult Delete()
    {

    }
}

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

4

1 回答 1

2

不是解决方案,您需要了解的是 Attributes 旨在Annotation仅用于不定义Behavior. 而且,当你在一个Controller上应用Filter属性时,它实际上意味着应用ActionMethods在控制器内的所有东西。

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

于 2013-09-30T05:09:01.410 回答