Exemplo n.º 1
0
        private OpenApiOperation GenerateOperation(ApiDescription apiDescription, SchemaRepository schemaRepository)
        {
            try
            {
                var operation = new OpenApiOperation
                {
                    Tags        = GenerateOperationTags(apiDescription),
                    OperationId = _options.OperationIdSelector(apiDescription),
                    Parameters  = GenerateParameters(apiDescription, schemaRepository),
                    RequestBody = GenerateRequestBody(apiDescription, schemaRepository),
                    Responses   = GenerateResponses(apiDescription, schemaRepository),
                    Deprecated  = apiDescription.CustomAttributes().OfType <ObsoleteAttribute>().Any()
                };

                apiDescription.TryGetMethodInfo(out MethodInfo methodInfo);
                var filterContext = new OperationFilterContext(apiDescription, _schemaGenerator, schemaRepository, methodInfo);
                foreach (var filter in _options.OperationFilters)
                {
                    filter.Apply(operation, filterContext);
                }

                return(operation);
            }
            catch (Exception ex)
            {
                throw new SwaggerGeneratorException(
                          message: $"Failed to generate Operation for action - {apiDescription.ActionDescriptor.DisplayName}. See inner exception",
                          innerException: ex);
            }
        }
Exemplo n.º 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);
        }
Exemplo n.º 3
0
        private OpenApiOperation GenerateOperation(ApiDescription apiDescription, SchemaRepository schemaRepository)
        {
            var operation = new OpenApiOperation
            {
                Tags        = GenerateOperationTags(apiDescription),
                OperationId = _options.OperationIdSelector(apiDescription),
                Parameters  = GenerateParameters(apiDescription, schemaRepository),
                RequestBody = GenerateRequestBody(apiDescription, schemaRepository),
                Responses   = GenerateResponses(apiDescription, schemaRepository),
                Deprecated  = apiDescription.CustomAttributes().OfType <ObsoleteAttribute>().Any()
            };

            var filterContext = new OperationFilterContext(apiDescription, _schemaGenerator, schemaRepository, apiDescription.MethodInfo());

            foreach (var filter in _options.OperationFilters)
            {
                filter.Apply(operation, filterContext);
            }

            return(operation);
        }
        private OpenApiOperation GenerateOperation(ApiDescription apiDescription, SchemaRepository schemaRepository)
        {
            apiDescription.GetAdditionalMetadata(out MethodInfo methodInfo, out IEnumerable <object> methodAttributes);

            var operation = new OpenApiOperation
            {
                Tags        = GenerateTags(apiDescription),
                OperationId = _options.OperationIdSelector(apiDescription),
                Parameters  = GenerateParameters(apiDescription, schemaRepository),
                RequestBody = GenerateRequestBody(apiDescription, methodAttributes, schemaRepository),
                Responses   = GenerateResponses(apiDescription, methodAttributes, schemaRepository),
                Deprecated  = methodAttributes.OfType <ObsoleteAttribute>().Any()
            };

            var filterContext = new OperationFilterContext(apiDescription, _schemaGenerator, schemaRepository, methodInfo);

            foreach (var filter in _options.OperationFilters)
            {
                filter.Apply(operation, filterContext);
            }

            return(operation);
        }