在我使用graphql-dotnet的项目中,我意外地开始收到DataLoader上下文为空的错误:
Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware[1]
An unhandled exception has occurred while executing the request.
System.ArgumentNullException: Value cannot be null.
Parameter name: context
at GraphQL.DataLoader.DataLoaderContextExtensions.GetOrAddBatchLoader[TKey,T](DataLoaderContext context, String loaderKey, Func`3 fetchFunc, IEqualityComparer`1 keyComparer, T defaultValue)context参数来自注入到图形类型的构造函数中的IDataLoaderContextAccessor。为什么它会是空的?
发布于 2019-08-30 23:32:54
如果在执行查询之前忘记添加DataLoaderDocumentListener,则context参数将为空(如我所做的):
public GraphQLController(
ISchema schema,
IDocumentExecuter documentExecuter,
DataLoaderDocumentListener dataLoaderListener)
{
_schema = schema;
_documentExecuter = documentExecuter;
_dataLoaderListener = dataLoaderListener;
}
[HttpPost]
public async Task<IActionResult> Post([FromBody]BaseGraphQuery query)
{
var inputs = query.Variables.ToInputs();
var executionOptions = new ExecutionOptions
{
Schema = _schema,
Query = query.Query,
Inputs = inputs,
};
// Important!
executionOptions.Listeners.Add(_dataLoaderListener);
// (Execute the query)
}并且DataLoaderDocumentListener必须存在于服务容器中:
public void ConfigureServices(IServiceCollection services)
{
// (other service configuration)
services.AddSingleton<GraphQL.DataLoader.IDataLoaderContextAccessor, GraphQL.DataLoader.DataLoaderContextAccessor>();
services.AddSingleton<GraphQL.DataLoader.DataLoaderDocumentListener>();
services.AddSingleton<GraphQL.IDocumentExecuter, GraphQL.DocumentExecuter>();
services.AddSingleton<GraphQL.Types.ISchema, RootSchema>();
}这个准确但模糊的错误消息让我很困惑,直到我想起我已经“重构”了一些代码,并错误地删除了Listeners.Add行。
发布于 2020-03-25 21:20:49
此外,您还需要确保在startup.ConfigureServices()中的所有其他内容之前使用services.AddMvc();。
https://stackoverflow.com/questions/57729603
复制相似问题