6

我只是想知道 IActionFilter和之间是否有任何区别IAuthorizationFilter

我假设我们可以在IActionFilter 可能的情况下实现相同的逻辑IAuthorizationFilter......这是真的吗?

谢谢!

4

3 回答 3

9

根据问题,是的,我们可以在IActionFilter和中实现相同的逻辑IAuthorizationFilter。但唯一的执行顺序不同。

ASP.NET MVC 框架支持四种不同类型的过滤器:

    Authorization – Implements  IAuthorizationFilter Attribute.
    Action        – Implements IActionFilter Attribute.
    Result        – Implements  IResultFilter Attribute.
    Exception     – Implements  IExceptionFilter Attribute.

注意: 过滤器按上面列出的顺序执行。

授权过滤器总是在动作过滤器之前执行,异常过滤器总是在其他类型的filter.

Authorizationauthentication过滤器用于实现authorization控制器动作。例如,授权过滤器是授权过滤器的一个示例。

动作过滤器包含在控制器动作执行之前和之后执行的逻辑。例如,您可以使用操作过滤器来修改控制器操作返回的视图数据。

Result过滤器包含在执行视图结果之前和之后执行的逻辑。例如,您可能想在视图呈现给浏览器之前修改视图结果。

Exception过滤器是最后运行的过滤器类型。您可以使用异常过滤器来处理由控制器操作或控制器操作结果引发的错误。您还可以使用异常过滤器来记录错误。

每种不同类型的过滤器都以特定的顺序执行。如果要控制执行相同类型过滤器的顺序,则可以设置过滤器的 Order 属性。

注意: 所有操作过滤器的基类是System.Web.Mvc.FilterAttribute类。

于 2013-10-08T14:42:54.330 回答
3

授权过滤器在操作管道中运行得非常早。例如,当条件不满足时,它们很适合从动作管道中逃脱。(使用它的示例 MVC 框架属性是 [Authorize]、[RequireHttps])

动作过滤器在授权过滤器之后执行,它可以参与动作的前处理和后处理。

于 2013-10-08T14:23:27.343 回答
1

是的,您可以使用操作过滤器实现身份验证过滤器。从这里

您可以将操作过滤器用于日志记录、身份验证、输出缓存或其他任务。

恐怕我不知道为什么存在差异,除了IAuthorizationFilter一个更简单的接口与它的一种方法,它的 Context 上的属性也更少。

于 2013-10-08T13:59:58.967 回答