使用.NET GraphQL绑定出现GraphTypeFromType空引用异常,原因何在?
这个空引用错误我在帮人排查.NET GraphQL问题时碰到过好几次,结合错误栈来看,核心是GraphTypeFromType方法里尝试对一个null对象调用GetType(),下面是几个最可能的原因和排查方向:
字段/类型配置传入了null类型
当你定义GraphQL字段、输入类型或者对象类型时,可能不小心把某个Type参数设成了null。比如在调用Field()方法指定返回类型时用了未初始化的变量,或者映射CLR类型时传入了null值,导致框架在解析类型时拿到null,进而触发GetType()的空引用异常。Schema未注册必要的自定义类型
如果你的Schema里引用了某个自定义GraphQL类型,但没提前把它注册到Schema的类型集合里,框架尝试解析这个类型时会返回null,后续调用GetType()就会报错。比如你写了个UserType,但构建Schema时没把它添加到类型注册列表里,或者注册方式不对。自动映射时的可空类型处理问题
如果你用了自动映射(从CLR类生成GraphQL类型),当实体类里有可空属性(比如public string? Nickname { get; set; }),但映射逻辑没正确处理可空情况,也可能导致框架拿到null类型,触发这个错误。检查一下自动映射的配置,确保可空CLR类型对应到正确的可空GraphQL类型。自定义类型转换器返回null
如果你自己实现了IType相关的转换器或扩展方法,可能在逻辑分支里不小心返回了null,被GraphTypeFromType调用时就会抛出异常。仔细检查你的自定义类型处理代码,确保所有分支都返回有效的类型实例。
建议你先从最近修改的字段或类型配置入手排查,要是能调试的话,在GraphTypeFromType方法附近加个断点,看看具体是哪个参数为null,这样能更快定位问题。
内容的提问来源于stack exchange,提问作者sh03

