授权操作过滤器和授权过滤器之间有什么区别?

时间:2016-06-25 13:35:52

标签: c# asp.net-mvc asp.net-mvc-4 filter

根据ASP.NET website

ASP.NET MVC框架包括几个操作过滤器:

  1. OutputCache - 此操作过滤器将控制器操作的输出缓存指定的时间。
  2. HandleError - 此操作过滤器处理执行控制器操作时引发的错误。
  3. 授权 - 此操作过滤器允许您限制对特定用户或角色的访问。
  4. 此外,MVC中有一种称为“授权过滤器”的过滤器。

    我很困惑[Authorize]属性是Action过滤器还是Authorization过滤器?什么时候会被执行?

2 个答案:

答案 0 :(得分:5)

  

授权操作过滤器和授权过滤器有什么区别?

无。

该文档显然是不正确的(如果您在目录中注明,它是针对MVC的版本1和2,那么它也是过时的。)

AuthorizeAttribute继承IAuthorizationFilter,因此它实际上是授权过滤器,而不是动作过滤器。 MVC中没有授权操作过滤器。

请注意,对于MVC 3到MVC 5,您应该在将来参考最新的Filtering in ASP.NET MVC文档。

  

什么时候会被执行?

根据MSDN

  

过滤器按以下顺序运行:

     
      
  1. 授权过滤器
  2.   
  3. 操作过滤器
  4.   
  5. 响应过滤器
  6.   
  7. 例外过滤器
  8.   

答案 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类是   授权过滤器的示例。授权过滤器之前运行   任何其他过滤器。