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

为何我的HotChocolate GraphQL Schema无法编译?求助排查

问题解答

1. 代码错误分析

报错信息明确指出The specified name is not a valid GraphQL name.,问题出在DocumentDtoType的配置逻辑中:
你多次调用descriptor.Name()方法传入字段描述文本,但Name()是用来定义GraphQL类型名称的API,而非字段描述。GraphQL类型名称必须符合命名规范:仅允许字母、数字、下划线,不能以数字开头,且不能包含空格。

正确的做法是用Description()方法设置字段/类型的描述文本,Name()仅需设置一次类型名称(也可省略,HotChocolate会自动根据类名生成默认名称)。

修正后的DocumentDtoType代码:

public class DocumentDtoType : ObjectType<DocumentDto>
{
    protected override void Configure(IObjectTypeDescriptor<DocumentDto> descriptor)
    {
        // 可选:手动指定类型名称,不设置则默认使用类名DocumentDto
        descriptor.Name("DocumentDto");
        // 设置类型的整体描述
        descriptor.Description("文档实体的GraphQL类型定义");

        descriptor.Field(f => f.Id)
            .Type<IdType>()
            .Description("实体的唯一标识符");

        descriptor.Field(f => f.Name)
            .Type<StringType>()
            .Description("文档的名称");

        descriptor.Field(f => f.Description)
            .Type<StringType>()
            .Description("文档实体的描述信息");

        descriptor.Field(f => f.Uri).Ignore();
    }
}

QueryType中的字段配置逻辑是正确的,无需修改。

2. 访问Errors属性的方法

在Banana Cake Pop UI中查看

执行查询后,错误详情会直接展示在UI的Response面板内,展开错误节点即可查看Errors数组中的具体内容。

在代码中捕获访问

若需在代码层面获取Errors,可通过捕获SchemaException实现:

try
{
    // 初始化Schema或执行查询的逻辑
}
catch (SchemaException ex)
{
    var errorDetails = ex.Errors;
    foreach (var error in errorDetails)
    {
        // 处理每条错误信息,例如打印日志
        Console.WriteLine($"错误:{error.Message}");
    }
}

另外,在开发环境下,ASP.NET Core的开发者异常页面会自动展示Errors的详细内容,你提供的报错日志中已经显示了第一条错误的具体信息。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 14:53:28