private async Task AddPrimitiveParameterAsync(string name, SwaggerOperation operation, ParameterInfo parameter, SwaggerGenerator swaggerGenerator) { var operationParameter = await swaggerGenerator.CreatePrimitiveParameterAsync(name, parameter).ConfigureAwait(false); operationParameter.Kind = SwaggerParameterKind.Query; operationParameter.IsRequired = operationParameter.IsRequired || parameter.HasDefaultValue == false; operation.Parameters.Add(operationParameter); }
private async Task AddFileParameterAsync(ParameterInfo parameter, bool isFileArray, SwaggerOperation operation, SwaggerGenerator swaggerGenerator) { var attributes = parameter.GetCustomAttributes().ToList(); // TODO: Check if there is a way to control the property name var parameterDocumentation = await parameter.GetXmlDocumentationAsync().ConfigureAwait(false); var operationParameter = await swaggerGenerator.CreatePrimitiveParameterAsync(parameter.Name, parameterDocumentation, parameter.ParameterType, attributes).ConfigureAwait(false); InitializeFileParameter(operationParameter, isFileArray); operation.Parameters.Add(operationParameter); }
private async Task AddPrimitiveParametersFromUriAsync(string httpPath, string name, SwaggerOperation operation, ParameterInfo parameter, JsonObjectTypeDescription typeDescription, SwaggerGenerator swaggerGenerator) { if (typeDescription.Type.HasFlag(JsonObjectType.Array)) { var parameterDocumentation = await parameter.GetXmlDocumentationAsync().ConfigureAwait(false); var operationParameter = await swaggerGenerator.CreatePrimitiveParameterAsync(name, parameterDocumentation, parameter.ParameterType, parameter.GetCustomAttributes().ToList()).ConfigureAwait(false); operationParameter.Kind = SwaggerParameterKind.Query; operation.Parameters.Add(operationParameter); } else { foreach (var property in parameter.ParameterType.GetRuntimeProperties()) { var attributes = property.GetCustomAttributes().ToList(); if (attributes.All(a => a.GetType().Name != "SwaggerIgnoreAttribute" && a.GetType().Name != "JsonIgnoreAttribute")) { var fromQueryAttribute = attributes.SingleOrDefault(a => a.GetType().Name == "FromQueryAttribute"); var propertyName = TryGetStringPropertyValue(fromQueryAttribute, "Name") ?? JsonReflectionUtilities.GetPropertyName(property, _settings.DefaultPropertyNameHandling); dynamic fromRouteAttribute = attributes.SingleOrDefault(a => a.GetType().FullName == "Microsoft.AspNetCore.Mvc.FromRouteAttribute"); if (fromRouteAttribute != null && !string.IsNullOrEmpty(fromRouteAttribute?.Name)) { propertyName = fromRouteAttribute?.Name; } dynamic fromHeaderAttribute = attributes.SingleOrDefault(a => a.GetType().FullName == "Microsoft.AspNetCore.Mvc.FromHeaderAttribute"); if (fromHeaderAttribute != null && !string.IsNullOrEmpty(fromHeaderAttribute?.Name)) { propertyName = fromHeaderAttribute?.Name; } var propertySummary = await property.GetXmlSummaryAsync().ConfigureAwait(false); var operationParameter = await swaggerGenerator.CreatePrimitiveParameterAsync(propertyName, propertySummary, property.PropertyType, attributes).ConfigureAwait(false); // TODO: Check if required can be controlled with mechanisms other than RequiredAttribute var parameterInfo = JsonObjectTypeDescription.FromType(property.PropertyType, attributes, _settings.DefaultEnumHandling); var isFileArray = IsFileArray(property.PropertyType, parameterInfo); if (parameterInfo.Type == JsonObjectType.File || isFileArray) { InitializeFileParameter(operationParameter, isFileArray); } else if (fromRouteAttribute != null || httpPath.ToLowerInvariant().Contains("{" + propertyName.ToLower() + "}") || httpPath.ToLowerInvariant().Contains("{" + propertyName.ToLower() + ":")) { operationParameter.Kind = SwaggerParameterKind.Path; operationParameter.IsNullableRaw = false; operationParameter.IsRequired = true; // Path is always required => property not needed } else if (fromHeaderAttribute != null) { operationParameter.Kind = SwaggerParameterKind.Header; } else { operationParameter.Kind = SwaggerParameterKind.Query; } operation.Parameters.Add(operationParameter); } } } }