コード例 #1
0
        protected static async Task <object> ExecuteResolverAsync(
            ResolverTask resolverTask,
            CancellationToken cancellationToken)
        {
            Activity activity = ResolverDiagnosticEvents.BeginResolveField(
                resolverTask.ResolverContext);

            object result = await ExecuteMiddlewareAsync(
                resolverTask,
                cancellationToken);

            if (result is IQueryError error)
            {
                activity?.AddTag("error", "true");
            }

            ResolverDiagnosticEvents.EndResolveField(
                activity,
                resolverTask.ResolverContext,
                result);

            return(result);
        }
コード例 #2
0
        protected static async Task <object> ExecuteResolverAsync(
            ResolverTask resolverTask,
            IErrorHandler errorHandler,
            CancellationToken cancellationToken)
        {
            Activity activity = ResolverDiagnosticEvents.BeginResolveField(
                resolverTask.ResolverContext);

            object result = await ExecuteMiddlewareAsync(
                resolverTask, errorHandler).ConfigureAwait(false);

            if (result is IError || result is IEnumerable <IError> )
            {
                activity?.AddTag("error", "true");
            }

            ResolverDiagnosticEvents.EndResolveField(
                activity,
                resolverTask.ResolverContext,
                result);

            return(result);
        }
コード例 #3
0
        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);
        }
コード例 #4
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);
                }
                else
                {
                    result = await ExecuteFieldMiddlewareAsync(
                        resolverTask);
                }
            }
            catch (QueryException ex)
            {
                result = ex.Errors;
            }
            catch (Exception ex)
            {
                ResolverDiagnosticEvents.ResolverError(
                    resolverTask.ResolverContext,
                    ex);

                result = errorHandler.Handle(ex, error => error
                                             .WithPath(resolverTask.Path)
                                             .WithSyntaxNodes(resolverTask.FieldSelection.Selection));
            }

            return(result);
        }