You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 11:22:14