ASP.NET MVC框架包括几个操作过滤器:
此外,MVC中有一种称为“授权过滤器”的过滤器。
我很困惑[Authorize]属性是Action过滤器还是Authorization过滤器?什么时候会被执行?
答案 0 :(得分:5)
授权操作过滤器和授权过滤器有什么区别?
无。
该文档显然是不正确的(如果您在目录中注明,它是针对MVC的版本1和2,那么它也是过时的。)
AuthorizeAttribute
继承IAuthorizationFilter
,因此它实际上是授权过滤器,而不是动作过滤器。 MVC中没有授权操作过滤器。
请注意,对于MVC 3到MVC 5,您应该在将来参考最新的Filtering in ASP.NET MVC文档。
什么时候会被执行?
根据MSDN:
过滤器按以下顺序运行:
- 授权过滤器
- 操作过滤器
- 响应过滤器
- 例外过滤器
醇>
答案 1 :(得分:2)
我很困惑[授权]属性是否为动作过滤器或 授权过滤器?
[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
它明确指出[授权]属性是授权过滤器:
AuthorizeAttribute类和RequireHttpsAttribute类是 授权过滤器的示例。授权过滤器之前运行 任何其他过滤器。