Ejemplo n.º 1
0
        public async Task <ActionResult> Post([FromBody] GqlRequest request)
        {
            if (request == null || !ModelState.IsValid)
            {
                return(BadRequest());
            }

            var vars = request.Variables?.ToString();

            var result = await _documentExecuter.ExecuteAsync(opts =>
            {
                opts.Schema = _schema;
                opts.Query  = request.Query;
                opts.ThrowOnUnhandledException = false;

                if (!string.IsNullOrEmpty(vars))
                {
                    opts.Inputs = vars.ToInputs();
                }
            });

            try
            {
                var perf = result.Perf.ToDictionary(x => $"{x.Category}_{x.Subject?.Camelize()}_elapsed", x => x.Duration);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "Error while building gql perf diagnostics gqlPerf={@gqlPerf}", result.Perf);
            }

            return(result.ToActionResult(this, request));
        }
Ejemplo n.º 2
0
 public GqlException(string message, Exception inner, GqlRequest request = null, string errorCode = null)
     : base(message, inner)
 {
     Request   = request;
     ErrorCode = errorCode;
 }
Ejemplo n.º 3
0
        private static ActionResult GetResultForException(ExecutionError error, ControllerBase controller, GqlRequest request)
        {
            var exception = error.GetBaseException();

            if (exception is ValidationError)
            {
                return(null);
            }

            if (exception is UnauthorizedException uex)
            {
                return(controller.StatusCode((int)HttpStatusCode.Forbidden));
            }

            throw new GqlException(exception.Message, exception, request, error.Code);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Converts execution result to <see cref="ActionResult"/> or throw.
        /// </summary>
        /// <param name="result">Result to convert.</param>
        /// <param name="controller">Current controller.</param>
        /// <param name="request"></param>
        /// <returns>Returns action result to return.</returns>
        public static ActionResult ToActionResult(this ExecutionResult result, ControllerBase controller, GqlRequest request)
        {
            if (!(result.Errors?.Count > 0))
            {
                return(new GqlExecutionResult(result));
            }

            foreach (var error in result.Errors)
            {
                var actionResult = GetResultForException(error, controller, request);
                if (actionResult != null)
                {
                    return(actionResult);
                }
            }
            return(new GqlExecutionResult(result, StatusCodes.Status400BadRequest));
        }