HotChocolate无参数C# Mutation无法正常工作问题求助
解决HotChocolate中无参数Mutation输入对象报错的问题
你遇到的问题是HotChocolate默认不允许生成没有字段的GraphQL输入对象,当你的CreateFooCommand没有任何属性时,自动生成的CreateFooCommandInput为空,触发了校验错误。以下是几种可行的解决办法:
方法一:修改Mutation方法,移除输入参数
既然不需要任何输入参数,直接在Mutation方法内实例化CreateFooCommand即可,跳过输入对象的生成:
[MutationType] public static class FooMutation { public static async Task<Guid> CreateFoo([FromServices] ICommandBus commandBus) => await commandBus.Send(new CreateFooCommand()); }
这种方式最直接,完全避免了空输入对象的问题,适合确实不需要任何输入的场景。
方法二:全局配置允许空输入对象
通过HotChocolate的选项配置,放宽对空输入对象的限制:
builder.Services.AddGraphQLServer() .AddMutationType<FooMutation>() // 其他必要配置(比如添加命令总线服务、注册处理器等) .ModifyOptions(options => { options.DefaultAllowEmptyInputObjects = true; });
开启这个配置后,HotChocolate会允许生成没有字段的输入对象,你的原始代码就能正常运行,适合需要保留输入对象结构(比如未来可能添加参数)的场景。
方法三:添加隐藏的占位字段(临时 workaround)
给CreateFooCommand添加一个被GraphQL忽略的可选字段,既满足输入对象有字段的要求,又不会暴露到Schema中:
public record CreateFooCommand : ICommand<Guid> { [GraphQLIgnore] public string? DummyField { get; init; } = null; }
这种方法属于临时 hack,不推荐长期使用,仅作为应急方案。
内容的提问来源于stack exchange,提问作者Andre
相关产品推荐
相关产品推荐

