使用 HotChocolate GraphQL 忽略对象中的方法

问题描述 投票:0回答:1

我有一个使用 Hotchocolate 和 GraphQL 公开的类。

在这个类中,我有一些属性和具有以下签名的公共方法:

  public Expression<Func<Parcelle, bool>> ToLambdaExpression()

默认情况下,Hot Chocolate 选择公共方法并将它们公开为 graphql 模式中的字段。我设法用这样的对象类型扩展来忽略它们:

protected override void Configure(IObjectTypeDescriptor<ParcelSelectionCriteriaExpression> descriptor)
    {
        descriptor.Ignore(t => t.TokenizeExpression());
    }

对于返回简单类型的方法来说,它大部分时间都有效。但是当我尝试对我的

ToLambdaExpression
方法执行此操作时,我在模式验证期间收到错误。

public class ParcelSelectionCriteriaExtension : ObjectTypeExtension<ParcelSelectionCriteria>
{
    protected override void Configure(IObjectTypeDescriptor<ParcelSelectionCriteria> descriptor)
    {
        descriptor.Ignore(t => t.ToLambdaExpression());
    }
}
 HotChocolate.SchemaException: For more details look at the `Errors` property.

      1. Unable to infer or resolve a schema type from the type reference `Expression (Input)`.

如果我评论

ToLambdaExpression
方法,一切都会正常。看起来即使我忽略该字段,它也会尝试解析其类型,并且由于它是一个
Expression<Func<Parcelle, bool>>
,因此它无法弄清楚如何输入它。

有没有办法让HotChocolate完全忽略这个方法而不需要创建DTO?

c# .net graphql hotchocolate
1个回答
0
投票

对我来说,使用“类型定义”更自然(语义上),但不使用类型扩展。 在这种情况下,以下方法应该有效:

public class ParcelSelectionCriteria
{
 public Expression<Func<Parcelle, bool>> ToLambdaExpression() 
 {
  throw new NotImplementedException();
 }
}

public class ParcelSelectionCriteriaType : ObjectType<ParcelSelectionCriteria>
{
 protected override void Configure(IObjectTypeDescriptor<ParcelSelectionCriteria> descriptor)
 {
  descriptor.Field(t => t.ToLambdaExpression()).Ignore();
 }
}
© www.soinside.com 2019 - 2024. All rights reserved.