.net 我的自定义授权属性始终激发,即使没有在global.asax和Controllers/Actions中设置属性

.net 我的自定义授权属性始终激发,即使没有在global.asax和Controllers/Actions中设置属性,.net,asp.net-mvc,asp.net-mvc-3,.net,Asp.net Mvc,Asp.net Mvc 3,我有一个自定义的Authorize属性,它总是激发。我删除了global.asax中的配置,并且在控制器/操作中没有属性。为什么? public class ValidatePermissionAttribute : AuthorizeAttribute { private AuthorizationContext _context; public override void OnAuthorization(AuthorizationContext context) {

我有一个自定义的Authorize属性,它总是激发。我删除了global.asax中的配置,并且在控制器/操作中没有属性。为什么?

public class ValidatePermissionAttribute : AuthorizeAttribute
{
    private AuthorizationContext _context;

    public override void OnAuthorization(AuthorizationContext context)
    {
        _context = context;

        base.OnAuthorization(context);
    }

    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        bool isAuthorized = false;

        //Use _context here
        ...

        return isAuthorized;
    }
}
My Global.asax:

public class MvcApplication : NinjectHttpApplication
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new LogActionAttribute());

        //ValidatePermissionFilterProvider validatePermissionProvider = new ValidatePermissionFilterProvider();

        //validatePermissionProvider.Add("Login", "Index");
        //validatePermissionProvider.Add("Erro", "*");

        //FilterProviders.Providers.Add(validatePermissionProvider);
    }

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Usuario", action = "Index", id = UrlParameter.Optional } // Parameter defaults
        );
    }

    protected override void OnApplicationStarted()
    {
        DefaultModelBinder.ResourceClassKey = "ViewModelValidations";

        AreaRegistration.RegisterAllAreas();

        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutes(RouteTable.Routes);

        Database.SetInitializer(new DatabaseInitializer());
    }

    protected override IKernel CreateKernel()
    {
        return DependencyResolverFactory.Instance.Kernel;
    }
}
发现问题:

回答为@DarinDimitrov时,我发现了问题,我使用Ninject在我的过滤器中注入了依赖性,这导致每个控制器中触发:

public class ApplicationServicesModule : NinjectModule
{
    public override void Load()
    {
        this.BindFilter<ValidatePermissionAttribute>(FilterScope.First, null);
    }
}
公共类应用程序服务模块:NinjectModule
{
公共覆盖无效负载()
{
this.BindFilter(FilterScope.First,null);
}
}

只有自定义属性不起任何作用。一定有一些代码正在注册它。它可以注册为全局操作筛选器,也可以用它修饰控制器/操作,或者使用依赖项注入框架将其注册为全局操作筛选器。右键单击
ValidatePermissionAttribute
并搜索使用此类的位置。通常情况下,VS会向您显示注册它的位置。

如果您的控制器派生自自定义控制器基类,您可能需要检查该基类以查看该属性是否也存在。您还可以尝试在属性名称
ValidatePermissionAttribute
上执行解决方案范围内的查找用法,以查看是否有遗漏的地方


编辑:查看您的global.asax,我看到您正在注册
LogActionAttribute
——该属性是否可能来自其他自定义授权属性?我将尝试删除所有自定义注册和筛选器,以查看问题是否仍然存在

我知道,由于这个原因,我感到困惑,我将发布其余代码。@Acaz Souza,在您的解决方案中搜索。发布一些不包含该属性的代码是没有意义的。我想一定是在什么地方留下了一些注册号。也许它是在你的Ninject模块中注册的。您也可以这样做:从项目中删除此类。你会看到它在哪里繁荣,你会知道你在哪里注册:-)谢谢你,伙计,你救了我。是我的DI容器,用于在筛选器中注入依赖关系。请参阅更新。@Acaz Souza,很高兴您能找到问题。你还有什么想问的吗?或者你可以结束这个问题吗?@Darin-已经对你之前的评论投了赞成票,希望我能做两次。很好的方法,套用实用主义程序员的话,“大失败,否则你只会失败!”