コード例 #1
0
        public async Task <HttpResponseMessage> PostGraphQLAsync(GraphQLQueryRequest request)
        {
            var inputs         = request.Variables.ToInputs();
            var queryToExecute = request.Query;

            var result = await this.executer.ExecuteAsync(_ =>
            {
                _.Schema        = this.schema;
                _.Query         = queryToExecute;
                _.OperationName = request.OperationName;
                _.Inputs        = inputs;
                _.UserContext   = this.ContainsCremaToken ? this.Authentication : null;

                _.ComplexityConfiguration = new ComplexityConfiguration {
                    MaxDepth = 15
                };
                _.FieldMiddleware.Use <InstrumentFieldsMiddleware>();
                _.ExposeExceptions   = true;
                _.FieldNameConverter = new DefaultFieldNameConverter();
            }).ConfigureAwait(false);

            var httpResult = result.Errors?.Count > 0
                ? HttpStatusCode.BadRequest
                : HttpStatusCode.OK;

            var json = await this.writer.WriteToStringAsync(result);

            var response = this.Request.CreateResponse(httpResult);

            response.Content = new StringContent(json, Encoding.UTF8, "application/json");

            return(response);
        }
コード例 #2
0
        public async Task <IActionResult> Query([FromBody] GraphQLQueryRequest query)
        {
            if (query is null || string.IsNullOrWhiteSpace(query.Query))
            {
                throw new System.ArgumentNullException(nameof(query));
            }

            var inputs           = query.Variables.ToInputs();
            var executionOptions = new ExecutionOptions
            {
                Schema = schema,
                Query  = query.Query,
                Inputs = inputs,
            };
            var result = await this.documentExecuter.ExecuteAsync(executionOptions);

            return(result.Errors?.Any() ?? false?
                   this.BadRequest(result.Errors) :
                       this.Ok(result.Data));
        }