private IList <OpenApiTag> GenerateTags(ApiDescription apiDescription) { return(_options.TagsSelector(apiDescription) .Select(tagName => new OpenApiTag { Name = tagName }) .ToList()); }
private Operation CreateOperation( ApiDescription apiDescription, ISchemaRegistry schemaRegistry) { // Try to retrieve additional metadata that's not provided by ApiExplorer MethodInfo methodInfo; var customAttributes = Enumerable.Empty <object>(); if (apiDescription.TryGetMethodInfo(out methodInfo)) { customAttributes = methodInfo.GetCustomAttributes(true) .Union(methodInfo.DeclaringType.GetTypeInfo().GetCustomAttributes(true)); } var isDeprecated = customAttributes.Any(attr => attr.GetType() == typeof(ObsoleteAttribute)); var operation = new Operation { OperationId = _options.OperationIdSelector(apiDescription), Tags = _options.TagsSelector(apiDescription), Consumes = CreateConsumes(apiDescription, customAttributes), Produces = CreateProduces(apiDescription, customAttributes), Parameters = CreateParameters(apiDescription, schemaRegistry), Responses = CreateResponses(apiDescription, schemaRegistry), Deprecated = isDeprecated ? true : (bool?)null }; // Assign default value for Consumes if not yet assigned AND operation contains form params if (operation.Consumes.Count() == 0 && operation.Parameters.Any(p => p.In == "formData")) { operation.Consumes.Add("multipart/form-data"); } var filterContext = new OperationFilterContext( apiDescription, schemaRegistry, methodInfo); foreach (var filter in _options.OperationFilters) { filter.Apply(operation, filterContext); } return(operation); }