コード例 #1
0
        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));
        }
コード例 #2
0
        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
                    }
                });
            }
        }