ASP.NET Core使用Hot Chocolate搭建GraphApi提示无有效mutation字段问题
问题原因
Hot Chocolate 默认仅会扫描显式注册的根查询/根变更类型的公共成员作为GraphQL字段,你嵌套的UsersMutation既没有被标记为GraphQL对象类型,也没有被显式注册到GraphQL服务中,因此Hot Chocolate无法识别它内部的CreateUser方法,判定该类型无有效字段触发报错。
修复方案
可选以下任意一种方案修复:
方案1:给嵌套变更类添加类型标记
给UsersMutation类添加Hot Chocolate提供的[ObjectType]特性,明确声明这是一个GraphQL对象类型:
using HotChocolate.Types; [ObjectType] public sealed class UsersMutation { public Task CreateUser([Service] ICreateUserMutationHandler handler, CreateUserParameters parameters) => handler.Handle(parameters); }
另外需确认根Mutation类中的Users成员是公共属性而非公共字段,你当前的表达式体写法public UsersMutation Users => new UsersMutation();属于属性,符合要求,无需修改。
方案2:在GraphQL配置中显式注册嵌套类型
修改GraphApiConfiguration配置类,将UsersMutation显式注册到GraphQL服务中:
public static class GraphApiConfiguration { public static IServiceCollection AddGraphApi<TQuery, TMutation>(this IServiceCollection services) where TQuery : class where TMutation : class { services.AddGraphQLServer() .AddQueryType<TQuery>() .AddMutationType<TMutation>() // 显式注册嵌套的变更类型 .AddType<UsersMutation>(); services.AddScoped<TQuery>(); services.AddScoped<TMutation>(); return services; } }
如果后续拆分更多业务模块的嵌套变更/查询类型,按照相同逻辑给每个类型加[ObjectType]特性,或者在配置中添加对应的AddType<T>()注册即可。
内容的提问来源于stack exchange,提问作者Tim Maes
相关产品推荐
相关产品推荐

