private Operation CreateOperation( ApiDescription apiDescription, ISchemaRegistry schemaRegistry) { var operation = new Operation { Tags = new[] { _settings.TagSelector(apiDescription) }, OperationId = apiDescription.FriendlyId(), Consumes = apiDescription.SupportedRequestMediaTypes().ToList(), Produces = apiDescription.SupportedResponseMediaTypes().ToList(), Parameters = CreateParameters(apiDescription, schemaRegistry), Responses = CreateResponses(apiDescription, schemaRegistry), Deprecated = apiDescription.IsObsolete() ? true : (bool?)null }; var filterContext = new OperationFilterContext( apiDescription, schemaRegistry); foreach (var filter in _settings.OperationFilters) { filter.Apply(operation, filterContext); } return(operation); }
private Operation CreateOperation(ApiDescription apiDescription, ISchemaRegistry schemaRegistry) { var parameters = apiDescription.ParameterDescriptions .Where(paramDesc => { return(paramDesc.Source.IsFromRequest && (paramDesc.ModelMetadata == null || paramDesc.ModelMetadata.IsBindingAllowed) && !paramDesc.IsPartOfCancellationToken()); }) .Select(paramDesc => CreateParameter(apiDescription, paramDesc, schemaRegistry)) .ToList(); var responses = apiDescription.SupportedResponseTypes .DefaultIfEmpty(new ApiResponseType { StatusCode = 200 }) .ToDictionary( apiResponseType => apiResponseType.StatusCode.ToString(), apiResponseType => CreateResponse(apiResponseType, schemaRegistry) ); var operation = new Operation { Tags = new[] { _settings.TagSelector(apiDescription) }, OperationId = apiDescription.FriendlyId(), Consumes = apiDescription.SupportedRequestMediaTypes().ToList(), Produces = apiDescription.SupportedResponseMediaTypes().ToList(), Parameters = parameters.Any() ? parameters : null, // parameters can be null but not empty Responses = responses, Deprecated = apiDescription.IsObsolete() ? true : (bool?)null }; var filterContext = new OperationFilterContext( apiDescription, schemaRegistry); foreach (var filter in _settings.OperationFilters) { filter.Apply(operation, filterContext); } return(operation); }
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 { Tags = new[] { _settings.TagSelector(apiDescription) }, OperationId = apiDescription.FriendlyId(), Consumes = apiDescription.SupportedRequestMediaTypes().ToList(), Produces = apiDescription.SupportedResponseMediaTypes().ToList(), Parameters = CreateParameters(apiDescription, schemaRegistry), Responses = CreateResponses(apiDescription, schemaRegistry), Deprecated = isDeprecated ? true : (bool?)null }; var filterContext = new OperationFilterContext( apiDescription, schemaRegistry, methodInfo); foreach (var filter in _settings.OperationFilters) { filter.Apply(operation, filterContext); } return(operation); }