private async Task WriteBodyPath(OpenApiOperation operation, Entity entity, OperationType operationType, Method method) { if (operation.Tags == null) { operation.Tags = new List <OpenApiTag>(); } operation.Tags.Add(new OpenApiTag() { Name = method.Tag != null ? method.Tag : entity.Tag != null ? entity.Tag : codeConvention.GetTag(entity, method) }); var operationId = method.OperationId; if (method.OperationId == null) { operationId = codeConvention.GetOperationId(entity, method); } operation.OperationId = operationId; if (method.OperationName != null || method.OperationId == null) { operation.AddExtension("x-operation-name", new OpenApiString(method.OperationName ?? codeConvention.GetOperationName(entity, method))); } IGenericSPSerializer?serializer = serializerResolver.GetSerialializerOrNull(null, entity, method); var(inputParameters, outputParameters) = await parametersProvider.GetApiParameters(new Filter.ParameterInterceptorContext(entity, method, true), method.IgnoreParameters, dbConnection); var context = new OperationResponseContext(entity, method, sPMiddlewareOptions.AlwaysWrapJson, outputParameters); operation.Responses = GetDefaultResponse(codeConvention.GetResultTypeName(method), outputParameters.Length > 0 ? codeConvention.GetOutputObjectTypeName(method) : null, context); if (serializer != null) { operation.Responses = serializer.ModifyResponses(operation.Responses, context); } if (operationType != OperationType.Get && inputParameters.Any(p => p.WebApiName != null && !entity.ContainsPathParameter(p.WebApiName))) { if (operation.RequestBody == null) { operation.RequestBody = new OpenApiRequestBody(); } operation.RequestBody.Required = true; operation.RequestBody.Description = "Parameters for " + method.SP.ToString(); bool requireFormData = inputParameters.Any(p => p.RequiresFormData); operation.RequestBody.Content.Add(requireFormData ? "multipart/form-data" : "application /json", new OpenApiMediaType() { Schema = new OpenApiSchema() { Reference = new OpenApiReference() { Type = ReferenceType.Schema, Id = codeConvention.GetParameterObjectName(entity, method) } } }); } if (operation.Parameters == null) { operation.Parameters = new List <OpenApiParameter>(); } if (operationType == OperationType.Get) { foreach (var item in inputParameters.Where(p => p.WebApiName != null && !entity.ContainsPathParameter(p.WebApiName))) { var schema = item.GetSchema(); operation.Parameters.Add(new OpenApiParameter() { Name = item.WebApiName, In = ParameterLocation.Query, Required = false, Schema = new OpenApiSchema() { // IsNullable etc are ignore intentionally Type = schema.Type, Format = schema.Format } }); } } foreach (var item in inputParameters.Where(p => p.WebApiName != null && entity.ContainsPathParameter(p.WebApiName))) { var schema = item.GetSchema(); operation.Parameters.Add(new OpenApiParameter() { Name = item.WebApiName, In = ParameterLocation.Path, Required = true, Schema = new OpenApiSchema() { Type = schema.Type, Format = schema.Format } }); } }