private IList <OpenApiTag> GenerateTags(ApiDescription apiDescription)
 {
     return(_options.TagsSelector(apiDescription)
            .Select(tagName => new OpenApiTag {
         Name = tagName
     })
            .ToList());
 }
示例#2
0
        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);
        }