GraphQL.NET v4升级到v7后DateGraphType可空参数映射问题
问题解决:GraphQL.NET v7中DateGraphType可空参数映射错误
解决步骤
在GraphQL.NET v7里,参数可空性的声明逻辑已经和v4完全不同,不能再通过Argument方法的第二个bool参数来标记可空。正确的写法是:
- 若参数为可选(可空):直接使用原类型(如
DateGraphType),无需额外参数 - 若参数为必填:用
NonNullGraphType<T>包裹原类型
对应你的代码,正确的可空参数写法应该是去掉第二个true参数(v7中这个参数要么被废弃,要么语义已变):
Field<BooleanGraphType>("updateDate") .Argument<DateGraphType>("newDate") // 默认即为可空/可选 .Argument<NonNullGraphType<IntGraphType>>("id") // 若id必填,建议用NonNull包裹 .Resolve() .WithScope() .WithService<IMediator>() .ResolveAsync(UpdateDateResolver);
如果仍然出现类型映射错误,可手动在GraphQL配置中注册DateGraphType:
services.AddGraphQL(options => { options.RegisteredTypes.Add(typeof(DateGraphType)); }) .AddSystemTextJson() .AddGraphTypes(typeof(YourSchema));
原因说明
从v4到v7的版本跨度中,GraphQL.NET重构了参数类型系统,严格遵循GraphQL规范:
- v4中通过
Argument<T>(name, nullable)的第二个参数控制可空性 - v7中改为默认类型为可空,必填参数必须显式用
NonNullGraphType<T>包装,原有的nullable参数逻辑被移除,导致传入true时触发类型映射异常。
内容的提问来源于stack exchange,提问作者Richard Cawthon
相关产品推荐
相关产品推荐

