示例#1
0
        private static async Task <object> ExecuteMiddlewareAsync(
            ResolverTask resolverTask,
            IErrorHandler errorHandler)
        {
            object result = null;

            try
            {
                if (!resolverTask.FieldSelection.Field.IsIntrospectionField &&
                    resolverTask.HasMiddleware)
                {
                    result = await ExecuteDirectiveMiddlewareAsync(
                        resolverTask).ConfigureAwait(false);
                }
                else
                {
                    result = await ExecuteFieldMiddlewareAsync(
                        resolverTask).ConfigureAwait(false);
                }

                if (result is IError error)
                {
                    return(errorHandler.Handle(error));
                }
                else if (result is IEnumerable <IError> errors)
                {
                    return(errorHandler.Handle(errors));
                }
                else
                {
                    return(result);
                }
            }
            catch (QueryException ex)
            {
                return(errorHandler.Handle(ex.Errors));
            }
            catch (Exception ex)
            {
                ResolverDiagnosticEvents.ResolverError(
                    resolverTask.ResolverContext,
                    ex);

                return(errorHandler.Handle(ex, error => error
                                           .WithPath(resolverTask.Path)
                                           .WithSyntaxNodes(resolverTask.FieldSelection.Selection)));
            }
        }
        private static async Task <object> ExecuteMiddlewareAsync(
            ResolverTask resolverTask,
            CancellationToken cancellationToken)
        {
            object result = null;

            try
            {
                if (!resolverTask.FieldSelection.Field.IsIntrospectionField &&
                    resolverTask.HasMiddleware)
                {
                    result = await ExecuteDirectiveMiddlewareAsync(
                        resolverTask,
                        cancellationToken);
                }
                else
                {
                    result = await ExecuteFieldMiddlewareAsync(
                        resolverTask,
                        cancellationToken);
                }
            }
            catch (QueryException ex)
            {
                result = ex.Errors;
            }
            catch (Exception ex)
            {
                ResolverDiagnosticEvents.ResolverError(
                    resolverTask.ResolverContext,
                    ex);

                result = resolverTask.CreateError(ex);
            }

            return(result);
        }