public Task HandleRequest(HttpContext context, Entity ent) { #if NET48 var method = ent.GetMethod(context.Request.HttpMethod); #else var method = ent.GetMethod(context.Request.Method); #endif foreach (var interceptor in this.requestInterceptors) { var shouldIntercept = interceptor.OnBeforeRequest(context, new RequestInterceptorContext( ent, method, this.dbConnection)); if (shouldIntercept != null) { context.Response.StatusCode = shouldIntercept.Value.statusCode; return(HttpHandlingUtils.HttpContentToResponse(shouldIntercept.Value.responseContent, context.Response)); } } #if NET48 var accept = (context.Request.Headers["Accept"] ?? "").Split(',').Select(ac => MediaTypeHeaderValue.Parse(ac)).ToList(); #else var accept = context.Request.GetTypedHeaders().Accept; #endif IGenericSPSerializer?serializer = serializerResolver.GetSerialializerOrNull(accept, ent, method); if (serializer == null) { context.Response.StatusCode = 415; return(Task.CompletedTask); } if (this.sPMiddlewareOptions.RequireAuthenticated && context.User?.Identity == null) { context.Response.StatusCode = 401; return(Task.CompletedTask); } #if NET48 if (context.Request.HttpMethod.ToUpper() == "GET") #else if (context.Request.Method.ToUpper() == "GET") #endif { return(HandleGetRequest(context, ent, serializer)); } return(HandleBodyRequest(context, method, ent, serializer)); }
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 } }); } }