예제 #1
0
        public async ValueTask InvokeAsync(IRequestContext context)
        {
            if (context.Document is null && context.Request.Query is not null)
            {
                var success = true;

                try
                {
                    using (_diagnosticEvents.ParseDocument(context))
                    {
                        context.DocumentId = ComputeDocumentHash(
                            context.DocumentHash,
                            context.Request.QueryHash,
                            context.Request.Query);
                        context.Document = ParseDocument(context.Request.Query);
                    }
                }
                catch (SyntaxException ex)
                {
                    success = false;

                    IError error = context.ErrorHandler.Handle(
                        ErrorBuilder.New()
                        .SetMessage(ex.Message)
                        .SetCode(ErrorCodes.Execution.SyntaxError)
                        .AddLocation(ex.Line, ex.Column)
                        .Build());

                    context.Exception = ex;
                    context.Result    = QueryResultBuilder.CreateError(error);

                    _diagnosticEvents.SyntaxError(context, error);
                }

                if (success)
                {
                    await _next(context).ConfigureAwait(false);
                }
            }