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)); } }
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)); }