授权操作过滤器和授权过滤器有啥区别?
Posted
技术标签:
【中文标题】授权操作过滤器和授权过滤器有啥区别?【英文标题】:What is the difference between Authorize Action filter and Authorization filter?授权操作过滤器和授权过滤器有什么区别? 【发布时间】:2016-10-27 23:59:47 【问题描述】:根据ASP.NET website
ASP.NET MVC 框架包括几个动作过滤器:
-
OutputCache - 此操作过滤器将控制器操作的输出缓存一段指定的时间。
HandleError – 此操作过滤器处理控制器操作执行时引发的错误。
授权 - 此操作过滤器使您能够限制对特定用户或角色的访问。
另外,MVC 中有一种过滤器叫做“授权过滤器”。
我很困惑 [Authorize] 属性是操作过滤器还是授权过滤器?什么时候执行?
【问题讨论】:
【参考方案1】:授权操作过滤器和授权过滤器有什么区别?
无。
该文档显然不正确(如果您在目录中注明,它适用于 MVC 的版本 1 和 2,因此它也已过时)。
AuthorizeAttribute
继承IAuthorizationFilter
,所以它实际上是一个授权过滤器,而不是一个动作过滤器。 MVC 中没有授权操作过滤器。
请注意,对于 MVC 3 到 MVC 5,您应该在以后参考最新的 Filtering in ASP.NET MVC 文档。
什么时候执行?
根据MSDN:
过滤器按以下顺序运行:
授权过滤器 动作过滤器 响应过滤器 异常过滤器
【讨论】:
【参考方案2】:我很困惑 [Authorize] 属性是动作过滤器还是 授权过滤器?
[Authorize]
属性是一个授权过滤器,通过查看它的源代码可以看出。如果仔细观察,它实现了IAuthorizationFilter
接口,并根据文档将其归类为授权过滤器。
namespace System.Web.Mvc
//
// Summary:
// Specifies that access to a controller or action method is restricted to users
// who meet the authorization requirement.
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
public class AuthorizeAttribute : FilterAttribute, IAuthorizationFilter
.........
什么时候执行?
根据文档:
过滤器按上面列出的顺序执行。例如, 授权过滤器总是在操作过滤器之前执行和 异常过滤器总是在所有其他类型的 过滤器。
查看当前在 MVC 中进行过滤的文档:https://msdn.microsoft.com/en-us/library/gg416513(VS.98).aspx
它明确指出 [Authorize] 属性是一个授权过滤器:
AuthorizeAttribute 类和 RequireHttpsAttribute 类是 授权过滤器的示例。授权过滤器在之前运行 任何其他过滤器。
【讨论】:
我看过源代码,就在那时我感到困惑。因为根据 ASP.NET 网站 asp.net/mvc/overview/older-versions-1/controllers-and-routing/… ,ASP.NET MVC 框架包括几个操作过滤器: - 授权 - 此操作过滤器使您能够限制对特定用户或角色的访问。 我相信这个文档已经过时了。看看这里:msdn.microsoft.com/en-us/library/gg416513(VS.98).aspx - 它清楚地表明 Authorize 属性是一个授权过滤器。以上是关于授权操作过滤器和授权过滤器有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
[Core]Asp.Net Core中的各种过滤器(授权资源操作结果异常)