private ControllerActionDescriptor CreateActionDescriptor( string httpMethod, string routeTemplate, string actionFixtureName) { var descriptor = new ControllerActionDescriptor(); descriptor.SetProperty(new ApiDescriptionActionData()); descriptor.DisplayName = actionFixtureName; descriptor.ActionConstraints = new List<IActionConstraintMetadata> { new HttpMethodConstraint(new[] { httpMethod }) }; descriptor.AttributeRouteInfo = new AttributeRouteInfo { Template = routeTemplate }; descriptor.MethodInfo = typeof(ActionFixtures).GetMethod(actionFixtureName); if (descriptor.MethodInfo == null) throw new InvalidOperationException( string.Format("{0} is not declared in ActionFixtures", actionFixtureName)); descriptor.Parameters = descriptor.MethodInfo.GetParameters() .Select(paramInfo => new ParameterDescriptor { Name = paramInfo.Name, ParameterType = paramInfo.ParameterType, BindingInfo = BindingInfo.GetBindingInfo(paramInfo.GetCustomAttributes(false)) }) .ToList(); // Set some additional properties - typically done via IApplicationModelConvention var attributes = descriptor.MethodInfo.GetCustomAttributes(true); descriptor.Properties.Add("ActionAttributes", attributes); descriptor.Properties.Add("IsObsolete", attributes.OfType<ObsoleteAttribute>().Any()); return descriptor; }
private static void AddApiExplorerInfo( ControllerActionDescriptor actionDescriptor, ActionModel action, ControllerModel controller) { var apiExplorerIsVisible = action.ApiExplorer?.IsVisible ?? controller.ApiExplorer?.IsVisible ?? false; if (apiExplorerIsVisible) { var apiExplorerActionData = new ApiDescriptionActionData() { GroupName = action.ApiExplorer?.GroupName ?? controller.ApiExplorer?.GroupName, }; actionDescriptor.SetProperty(apiExplorerActionData); } }
private static void AddApiExplorerInfo( ControllerActionDescriptor actionDescriptor, ApplicationModel application, ControllerModel controller, ActionModel action) { var isVisible = action.ApiExplorer?.IsVisible ?? controller.ApiExplorer?.IsVisible ?? application.ApiExplorer?.IsVisible ?? false; var isVisibleSetOnActionOrController = action.ApiExplorer?.IsVisible ?? controller.ApiExplorer?.IsVisible ?? false; // ApiExplorer isn't supported on conventional-routed actions, but we still allow you to configure // it at the application level when you have a mix of controller types. We'll just skip over enabling // ApiExplorer for conventional-routed controllers when this happens. var isVisibleSetOnApplication = application.ApiExplorer?.IsVisible ?? false; if (isVisibleSetOnActionOrController && !IsAttributeRoutedAction(actionDescriptor)) { // ApiExplorer is only supported on attribute routed actions. throw new InvalidOperationException(Resources.FormatApiExplorer_UnsupportedAction( actionDescriptor.DisplayName)); } else if (isVisibleSetOnApplication && !IsAttributeRoutedAction(actionDescriptor)) { // This is the case where we're going to be lenient, just ignore it. } else if (isVisible) { Debug.Assert(IsAttributeRoutedAction(actionDescriptor)); var apiExplorerActionData = new ApiDescriptionActionData() { GroupName = action.ApiExplorer?.GroupName ?? controller.ApiExplorer?.GroupName, }; actionDescriptor.SetProperty(apiExplorerActionData); } }
private static void AddApiExplorerInfo( ControllerActionDescriptor actionDescriptor, ActionModel action, ControllerModel controller) { var apiExplorerIsVisible = action.ApiExplorer?.IsVisible ?? controller.ApiExplorer?.IsVisible ?? false; if (apiExplorerIsVisible) { if (!IsAttributeRoutedAction(actionDescriptor)) { // ApiExplorer is only supported on attribute routed actions. throw new InvalidOperationException(Resources.FormatApiExplorer_UnsupportedAction( actionDescriptor.DisplayName)); } var apiExplorerActionData = new ApiDescriptionActionData() { GroupName = action.ApiExplorer?.GroupName ?? controller.ApiExplorer?.GroupName, }; actionDescriptor.SetProperty(apiExplorerActionData); } }