我有一个始终触发的自定义授权属性。我删除了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;
}
}
我的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在我的Filter中注入一个依赖,这导致每个Controller中都会触发:
public class ApplicationServicesModule : NinjectModule
{
public override void Load()
{
this.BindFilter<ValidatePermissionAttribute>(FilterScope.First, null);
}
}
答案 0 :(得分:0)
只有自定义属性不会执行任何操作。必须有一些注册它的代码。它可以注册为全局动作过滤器,您可以使用它来装饰控制器/动作,也可以使用依赖注入框架将其注册为全局动作过滤器。右键单击ValidatePermissionAttribute
并搜索此类正在使用的位置。通常VS会显示您注册的位置。
答案 1 :(得分:0)
如果您的控制器派生自自定义控制器基类,您可能需要检查它以查看该属性是否也存在。您还可以尝试在属性名称ValidatePermissionAttribute
上执行解决方案范围内的查找用法,以查看是否存在您错过的位置。
编辑:查看你的global.asax,我看到你正在注册LogActionAttribute
- 该属性是否可能来自你的其他自定义授权属性?我会尝试删除所有自定义注册和过滤器以查看问题是否仍然存在