控制器方法的MVC中间件检查属性

时间:2017-05-29 12:46:21

标签: c# asp.net-core asp.net-core-mvc

我正在使用asp.net核心mvc。在默认身份验证旁边,我添加了非常具体的授权,使用ResultFilterAttribute属性完成。

将来,为了确保开发人员要为每个控制器方法指定权限,我想在执行操作之前检查是否为方法设置了属性。

可以在MVC中间件中完成吗?或者可能有更好的方法?

1 个答案:

答案 0 :(得分:1)

感谢Christian提及ControllerFactory。在我的案例中,这是正确的方法。

 public class MyControllerFactory : DefaultControllerFactory
    {
        public MyControllerFactory (IControllerActivator controllerActivator, IEnumerable<IControllerPropertyActivator> propertyActivators)
            : base(controllerActivator, propertyActivators)
        {

        }

        public override object CreateController(ControllerContext context)
        {
            var controllerActionDescriptor = context.ActionDescriptor as ControllerActionDescriptor;
                var isDefined = controllerActionDescriptor.MethodInfo.GetCustomAttributes(inherit: true)
                    .Any(a => a.GetType().Equals(typeof(PermissionFilterAttribute)));
                if (!isDefined)
                {
                    throw new NotImplementedException();
                }

            return base.CreateController(context);
        }
    }

在Startup.cs需要告诉mvc在解析IControllerFactory接口时使用MyControllerFactory。

services.AddSingleton<IControllerFactory, MyControllerFactory>();