1

热巧克力中的 , 和 ,ScopedContextDataLocalContextData什么区别?ContextData

4

1 回答 1

1

上下文数据:

这是全局上下文数据。此请求中的所有解析器都可以访问此数据。

你可以设置它:

 services.AddGraphQLServer()
    .SetContextData("foo", "bar");

如果您需要访问 HTTP 上下文:

 services.AddGraphQLServer()
    .AddHttpRequestInterceptor<CustomInterceptor>()

    public class CustomInterceptor : DefaultHttpRequestInterceptor
    {
        public override ValueTask OnCreateAsync(
            HttpContext context,
            IRequestExecutor requestExecutor,
            IQueryRequestBuilder requestBuilder,
            CancellationToken cancellationToken)
        {
            requestBuilder.AddProperty("foo", "bar");
            return base.OnCreateAsync(context, requestExecutor, requestBuilder, cancellationToken);
        }
    }

ScopedContextData:

可用于此解析器的整个子树这是一个不可变的,可以通过上下文在解析器或中间件中修改:

context.ScopedContextData = context.ScopedContextData.SetItem("foo","bar");

本地上下文数据:

仅在解析器管道内可用。这可用于在中间件之间进行通信。这是一个不可变的,可以通过上下文在解析器或中间件中进行修改:

context.LocalContextData = context.LocalContextData.SetItem("foo","bar");
于 2021-01-26T16:01:45.367 回答