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

Hot Chocolate框架无法为Input类型字段设置默认值如何解决

问题原因

这个报错是因为.NET 原生的[DefaultValue]特性在被GraphQL框架(通常为Hot Chocolate)序列化时,不会自动将C# 枚举值转换为GraphQL SDL要求的大写枚举名称,生成的SDL默认值会保留C# 侧的命名格式,导致Altair解析SDL时格式不匹配。

解决方案

你可以通过以下两种配置方式得到预期的SDL结构:

方案1:全局配置枚举命名规则+使用GraphQL专属默认值特性

  1. 首先在服务注册时配置全局枚举命名规则,确保枚举值序列化后为大写格式:
builder.Services.AddGraphQLServer()
    // 配置全局枚举默认使用大写命名约定
    .ModifyOptions(opt => opt.DefaultEnumNamingConvention = EnumNamingConvention.UpperCase);
  1. 将输入类的[DefaultValue]替换为Hot Chocolate提供的[GraphQLDefaultValue]特性:
using HotChocolate;

public class PostPhotoInput
{
    [GraphQLDefaultValue(PhotoCategory.Portrait)]
    public PhotoCategory Category { get; set; }
}

方案2:显式定义输入对象类型配置

如果你不想修改原有输入类的特性,也可以通过自定义输入类型配置的方式指定默认值:

using HotChocolate.Types;

public class PostPhotoInputType : InputObjectType<PostPhotoInput>
{
    protected override void Configure(IInputObjectTypeDescriptor<PostPhotoInput> descriptor)
    {
        descriptor.Field(f => f.Category)
            .DefaultValue(PhotoCategory.Portrait);
    }
}

配置完成后重新启动服务,生成的SDL就会符合预期格式,Altair重载文档时不会再抛出解析错误。

内容的提问来源于stack exchange,提问作者Anthony Bias

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:54:03