コード例 #1
0
        public void Apply(ControllerModel controller)
        {
            if (!serviceType.IsAssignableFrom(controller.ControllerType))
            {
                return;
            }

            var attrs           = controller.ControllerType.GetCustomAttributes();
            var controllerAttrs = new List <object>();

            foreach (var att in attrs)
            {
                if (att is RouteAttribute routeAttr)
                {
                    var template = routeAttr.Template;
                    controllerAttrs.Add(new RouteAttribute(template));
                }

                if (att is FlooAuthorizeAttribute authorize)
                {
                    controller.Filters.Add(new AuthorizeFilter(new[] { new MvcAuthorizeAttribute()
                                                                       {
                                                                           AuthenticationSchemes = authorize.AuthenticationSchemes,
                                                                           Policy = authorize.Policy,
                                                                           Roles  = authorize.Roles
                                                                       } }));
                }
            }

            if (controllerAttrs.Any())
            {
                controller.Selectors.Clear();
                ModelConventionHelper.AddRange(controller.Selectors, ModelConventionHelper.CreateSelectors(controllerAttrs));
            }
        }
コード例 #2
0
        public void Apply(ActionModel action)
        {
            if (!serviceType.IsAssignableFrom(action.Controller.ControllerType))
            {
                return;
            }

            var actionParams = action.ActionMethod.GetParameters();

            var method = serviceType.GetMethods().FirstOrDefault(mth => action.ActionMethod.Name == mth.Name && !actionParams.Except(mth.GetParameters(), new ModelConventionHelper.ParameterInfoEqualityComparer()).Any());

            if (method == null)
            {
                return;
            }

            var attrs       = method.GetCustomAttributes();
            var actionAttrs = new List <object>();

            if (actionParams.All(x => x.ParameterType.IsUriParameterType() || x.ParameterType.IsUriParameterTypeArray()))
            {
                actionAttrs.Add(new HttpGetAttribute(method.GetPath()));
            }
            else if (!attrs.Any(x => x is HttpMethodAttribute || x is RouteAttribute))
            {
                actionAttrs.Add(new HttpPostAttribute(method.GetPath()));
            }

            action.Selectors.Clear();
            ModelConventionHelper.AddRange(action.Selectors, ModelConventionHelper.CreateSelectors(actionAttrs));
        }