ASP.NET MVC中自定义操作筛选器和自定义操作选择器之间的区别是什么?

时间:2015-05-21 21:10:24

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

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

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

[MyRestriction]
public ActionResult AnyAction(){}

有人可以解释它们之间的差异,以便我做出正确的决定吗?

1 个答案:

答案 0 :(得分:4)

如果您查看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

换句话说,这些是控制在路由期间选择哪个操作方法的属性,当有多个不同的选择可供选择时(即有2个不同的索引方法,一个用[HttpGet]修饰,一个用{ {1}})。

另一方面,

ActionFilterAttribute仅在动作实际执行时被调用。

以这种方式思考,即使动作没有执行,选择也可以运行,ActionFilter只有在执行时才会运行。选择过滤器仅用于确定操作是否为匹配条件,操作过滤器用于在执行操作或响应之前,之后等执行某些操作。