该错误在到达services.AddGraphQL时发生。
我试着降低GraphQL至2.4版本的级别,但后来FuncServiceProvider停止了工作。
我现在拥有的是:
MarketScheme.cs
public class MarketScheme : Schema
{
public MarketScheme(IServiceProvider provider) : base(provider)
{
Query = provider.GetRequiredService<AppQuery>();
}
}Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<marketContext>();
services.AddScoped<IMarketRepository, MarketRepository>();
services.AddScoped<IProductRepository, ProductRepository>();
services.AddScoped<IServiceProvider>(provider => new FuncServiceProvider(provider.GetRequiredService));
services.AddScoped<MarketScheme>();
services.AddGraphQL(options =>
{
options.ExposeExceptions = true;
options.EnableMetrics = true;
}).AddGraphTypes(ServiceLifetime.Scoped);
services.AddControllers();
}发布于 2020-09-18 18:52:23
这有两部分。
GraphQL.Http.IDocumentWriter移到GraphQL.IDocumentWriter。如果您已经编写了自己的中间件,则使用请参阅2.x到3.0升级指南。
Newtonsoft.Json实例
using Newtonsoft.Json;
private static async Task ExecuteAsync(HttpContext context, ISchema schema)
{
GraphQLRequest request;
using (var reader = new StreamReader(context.Request.Body))
using (var jsonReader = new JsonTextReader(reader))
{
var ser = new JsonSerializer();
request = ser.Deserialize<GraphQLRequest>(jsonReader);
}
var executer = new DocumentExecuter();
var result = await executer.ExecuteAsync(options =>
{
options.Schema = schema;
options.Query = request.Query;
options.OperationName = request.OperationName;
options.Inputs = request.Variables.ToInputs();
});
context.Response.ContentType = "application/json";
context.Response.StatusCode = result.Errors?.Any() == true ? (int)HttpStatusCode.BadRequest : (int)HttpStatusCode.OK;
var writer = new GraphQL.NewtonsoftJson.DocumentWriter();
await writer.WriteAsync(context.Response.Body, result);
}
public class GraphQLRequest
{
public string OperationName { get; set; }
public string Query { get; set; }
public Newtonsoft.Json.Linq.JObject Variables { get; set; }
}System.Text实例
using System.Text.Json;
private static async Task ExecuteAsync(HttpContext context, ISchema schema)
{
var request = await JsonSerializer.DeserializeAsync<GraphQLRequest>
(
context.Request.Body,
new JsonSerializerOptions { PropertyNameCaseInsensitive = true }
);
var executer = new DocumentExecuter();
var result = await executer.ExecuteAsync(options =>
{
options.Schema = schema;
options.Query = request.Query;
options.OperationName = request.OperationName;
options.Inputs = request.Variables.ToInputs();
});
context.Response.ContentType = "application/json";
context.Response.StatusCode = 200; // OK
var writer = new GraphQL.SystemTextJson.DocumentWriter();
await writer.WriteAsync(context.Response.Body, result);
}
public class GraphQLRequest
{
public string OperationName { get; set; }
public string Query { get; set; }
[JsonConverter(typeof(GraphQL.SystemTextJson.ObjectDictionaryConverter))]
public Dictionary<string, object> Variables { get; set; }
}https://stackoverflow.com/questions/63079557
复制相似问题