【问题标题】:How to tell if an attribute call is originated from Controller vs. Action如何判断属性调用是否来自控制器与动作
【发布时间】:2013-09-30 04:45:39
【问题描述】:

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

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

是否可以在不从控制器中实际删除 [myAttribute] 的情况下执行此操作?

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

    public ViewResult View()
    {
    }

    public ViewResult Edit()
    {
    }

    [myAttribute]
    public ViewResult Delete()
    {

    }
}

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

【问题讨论】:

    标签: asp.net-mvc action-filter


    【解决方案1】:

    不是解决方案, 您需要了解的是 Attributes 旨在用于Annotation,而不是定义Behavior。 而且,当你在Controller上应用Filter属性的时候,其实就是申请了Controller内所有的ActionMethods

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-03
      • 1970-01-01
      • 2012-01-05
      • 1970-01-01
      相关资源
      最近更新 更多