首页 > 解决方案 > 即使未使用属性,也会调用自定义授权属性

问题描述

我在使用 ASP.Net MVC 5 时遇到以下问题。即使我没有在代码中的任何位置添加该属性,也会调用 OnAuthorization 方法。

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
    public class CustomAuthorizeAttribute : AuthorizeAttribute
    {
        public override void OnAuthorization(AuthorizationContext filterContext)
        {

        }
    }

我在 Global.asax 下添加了过滤器:

AreaRegistration.RegisterAllAreas();
GlobalFilters.Filters.Add(new CustomAuthorizeAttribute());

不应该只在将属性添加到类或方法时才调用 OnAuthorization 方法吗?

标签: c#asp.net-mvc

解决方案


不应该只在将属性添加到类或方法时才调用 OnAuthorization 方法吗?

部分是的。但是你需要知道 ASP.Net MVC 有一个全局过滤器的概念。当您不需要重复自己时使用全局过滤器(打破 DRY 原则)。它可以帮助您集中和配置需要为所有控制器执行的过滤器。

这条线

GlobalFilters.Filters.Add(new CustomAuthorizeAttribute());

正在全局添加过滤器,因此即使您没有将过滤器属性应用于控制器类或操作,它也会被调用。


推荐阅读