Asp.net mvc 3 不执行具有Ninject的ASP.NET MVC 3自定义属性

Asp.net mvc 3 不执行具有Ninject的ASP.NET MVC 3自定义属性,asp.net-mvc-3,ninject,filterattribute,Asp.net Mvc 3,Ninject,Filterattribute,我一定是做错了什么,因为我在这个问题上重复了很多答案。我的属性绑定没有被命中,我不知道为什么 控制器 [NatGeoUserAccessAuthorization] [HttpGet] public virtual ActionResult Teacher(string id) { 属性/Fitler public class NatGeoUserAccessAuthorizationAttribute : FilterAttribute{}

我一定是做错了什么,因为我在这个问题上重复了很多答案。我的属性绑定没有被命中,我不知道为什么

控制器

[NatGeoUserAccessAuthorization]
        [HttpGet]
        public virtual ActionResult Teacher(string id)
        {
属性/Fitler

public class NatGeoUserAccessAuthorizationAttribute : FilterAttribute{}
    public class NatGeoUserAccessAuthorizationFilter : IAuthorizationFilter 
    {
        private readonly IUsersService _usersService;

        public NatGeoUserAccessAuthorizationFilter(IUsersService usersService)
        {
            _usersService = usersService;
        }

        public string QueryStringName { get; set; }

        #region Implementation of IAuthorizationFilter

        public void OnAuthorization(AuthorizationContext filterContext)
        {
            if (!_usersService.HasUserAccess(filterContext.HttpContext.User.Identity.Name, filterContext.HttpContext.Request.QueryString[QueryStringName ?? "id"]))
            {
                filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary { { "action", "AccessDenied" }, { "controller", "Error" } });
            }
        }

        #endregion
    }
Global.asax

protected void Application_Start()
        {            
            // NLog Custom Layouts
            ConfigurationItemFactory.Default.LayoutRenderers.RegisterDefinition("utc_date", typeof(UtcDateRenderer));
            ConfigurationItemFactory.Default.LayoutRenderers.RegisterDefinition("web_variables", typeof(WebVariablesRenderer));

            // Setup IoC Container
            DependencyResolver.SetResolver(Bootstrap.Configure((kernel) =>
            {
                kernel.Bind<IDatabaseFactory>().To<DatabaseFactory<MySqlConnection>>().InRequestScope().WithConstructorArgument("connectionString", Config.Data.MySQLConnection);

                ManagerBindings.Register(kernel);
                ProviderBindings.Register(kernel);
                RepositoryBindings.Register(kernel);
                ServiceBindings.Register(kernel);
                ValidationBindings.Register(kernel);

                kernel.BindFilter<NatGeoUserAccessAuthorizationFilter>(FilterScope.Action, 0).WhenActionMethodHas<NatGeoUserAccessAuthorizationAttribute>();

                kernel.Bind<IUserProfile>().To<UserProfile>();
                kernel.Inject(Roles.Provider);
            }));

            // Custom Default Model Binder
            ModelBinders.Binders.DefaultBinder = new ValidationModelBinder();

            AreaRegistration.RegisterAllAreas();

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

您正在使用自己的引导机制,该机制不支持筛选器绑定。阅读文档,了解如何使用上的Ninject.Mvc3附带的文档

我想您没有将IUsersService与Ninject绑定?试试这个:kernel.Bind().To();属性classI上的说明符a[AttributeUsage]没有,但它在ServiceBindings.Register(内核)下;可能就是这样。我以前使用过NinjectHttpApplication,但在另一个项目中出现了一个问题,现在我记不得了。我将尝试在此当前项目上再次使用此设置。
public class Bootstrap
    {
        public delegate void IocRegistrationDelegate(IKernel kernel);

        public static IDependencyResolver Configure(IocRegistrationDelegate serviceBindings)
        {
            var kernel = new StandardKernel();

            serviceBindings.Invoke(kernel);

            return new NinjectDependencyResolver(kernel);
        }
    }