我只是想知道IActionFilter
和IAuthorizationFilter
之间是否有任何区别?
我假设我们可以在IActionFilter
下实现可能具有IAuthorizationFilter
的相同逻辑......这是真的吗?
谢谢!
答案 0 :(得分:9)
根据问题,是的,我们可以在IActionFilter
和IAuthorizationFilter
中实现相同的逻辑。但唯一的执行顺序不同。
ASP.NET MVC框架支持四种不同类型的过滤器:
Authorization – Implements IAuthorizationFilter Attribute.
Action – Implements IActionFilter Attribute.
Result – Implements IResultFilter Attribute.
Exception – Implements IExceptionFilter Attribute.
注意: 过滤器按上面列出的顺序执行。
授权过滤器始终在操作过滤器之前执行,并且异常过滤器始终在每种其他类型的filter
之后执行。
Authorization
过滤器用于为控制器操作实现authentication
和authorization
。例如,授权过滤器是授权过滤器的一个示例。
操作过滤器包含在执行控制器操作之前和之后执行的逻辑。例如,您可以使用操作过滤器来修改控制器操作返回的视图数据。
Result
过滤器包含在执行视图结果之前和之后执行的逻辑。例如,您可能希望在将视图呈现给浏览器之前修改视图结果。
Exception
过滤器是最后一种要运行的过滤器。您可以使用异常过滤器来处理由控制器操作或控制器操作结果引发的错误。您还可以使用异常过滤器来记录错误。
每种不同类型的过滤器都按特定顺序执行。如果要控制执行相同类型的过滤器的顺序,则可以设置过滤器的Order属性。
注意: 所有操作过滤器的基类是System.Web.Mvc.FilterAttribute
类。
答案 1 :(得分:3)
授权过滤器在操作管道中很早就开始运行。例如,当条件不满足时,它们可以逃离动作管道。 (使用它的示例MVC框架属性是[Authorize],[RequireHttps])
动作过滤器在授权过滤器之后执行,它可以参与动作的前后处理。
答案 2 :(得分:1)
是的,您可以使用操作过滤器实现身份验证过滤器。来自here:
您可以使用操作过滤器进行日志记录,身份验证,输出缓存或其他任务。
我担心我不知道为什么除IAuthorizationFilter
之外存在差异是一个简单的接口,它是一个方法,它的上下文也有更少的属性。