【问题标题】:What´s the difference between a custom action filter and a custom action selector in ASP.NET MVC?ASP.NET MVC 中的自定义操作筛选器和自定义操作选择器有什么区别?
【发布时间】:2015-05-21 21:10:23
【问题描述】:

我想知道 ASP.NET MVC 中自定义操作过滤器和自定义操作选择器之间的区别。

假设我们想根据一些规则限制谁可以访问控制器上的操作方法。我可以创建一个扩展 ActionFilterAttribute 类或扩展 ActionMethodSelectionAttribute 类的动作过滤器,这样我就可以有类似的东西:

[MyRestriction]
public ActionResult AnyAction(){}

谁能解释它们之间的区别,以便我做出正确的决定?

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-4


    【解决方案1】:

    如果您查看ActionMethodSelectionAttribute 的文档,您会在页面的最底部看到许多其他类派生自该属性。

    这些包括:

    • Microsoft.Web.Mvc.AjaxOnlyAttribute
    • System.Web.Mvc.AcceptVerbsAttribute
    • System.Web.Mvc.HttpDeleteAttribute
    • System.Web.Mvc.HttpGetAttribute
    • System.Web.Mvc.HttpHeadAttribute
    • System.Web.Mvc.HttpOptionsAttribute
    • System.Web.Mvc.HttpPatchAttribute
    • System.Web.Mvc.HttpPostAttribute
    • System.Web.Mvc.HttpPutAttribute
    • System.Web.Mvc.NonActionAttribute

    换句话说,当有几种不同的选择可供选择时,这些属性控制在路由期间选择哪个动作方法(即有两种不同的索引方法,一种用[HttpGet]装饰,另一种用[HttpPost]装饰)。

    另一方面,ActionFilterAttribute 仅在实际执行操作时被调用。

    这样想,即使动作不执行,选择也可以运行,ActionFilter 只有在执行时才运行。选择过滤器仅用于判断动作是否为匹配条件,动作过滤器用于做一些动作之前、之后等。动作或响应被执行。

    【讨论】:

    • 我们能不能说 ActionMethodSelection 用于路由,而 ActionFilterAttribute 用于在运行被调用的操作之前或之后添加一些额外的逻辑?
    • @jobmo - 这正是我所说的。
    猜你喜欢
    • 2014-06-30
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 2020-03-21
    • 1970-01-01
    • 2020-07-10
    • 1970-01-01
    • 2017-06-16
    相关资源
    最近更新 更多