为何我的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
相关产品推荐
相关产品推荐

