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