繁体   English   中英

ASP.NET 6 远程模式字段上的 HotChocolate SchemaStitching 失败

[英]ASP.NET 6 HotChocolate SchemaStitching failure on remote schema fields

我正在尝试更改GitHub 上的 SchemStitching示例,以从产品服务而不是网关服务中使用它。

这个想法是扩展产品的模式并包括来自库存和评论的信息。

我在产品服务中所做的更改:

添加带有产品类型扩展名的stitiching.graphql文件

extend type Product {
  inStock: Boolean
    @delegate(
      schema: "inventory",
      path: "inventoryInfo(upc: $fields:upc).isInStock")
  shippingEstimate: Int
    @delegate(
      schema: "inventory"
      path: "shippingEstimate(weight: $fields:weight price: $fields:price)")
  reviews: [Review] @delegate(schema: "reviews" path:"reviewsByProduct(upc: $fields:upc)")
}

更改Startup.cs以注册用于清单和评论的远程模式。

const string Inventory = "inventory";
const string Reviews = "reviews";

builder.Services.AddHttpClient(Inventory, 
    c => c.BaseAddress = new Uri("http://localhost:64309/graphql"));
builder.Services.AddHttpClient(Reviews, 
    c => c.BaseAddress = new Uri("http://localhost:64317/graphql"));

builder.Services
    .AddSingleton<ProductRepository>()
    .AddGraphQLServer()
    .AddQueryType<Query>()
    .AddRemoteSchema(Inventory, ignoreRootTypes: true)
    .AddRemoteSchema(Reviews, ignoreRootTypes: true)
    .AddTypeExtensionsFromFile("./Stitching.graphql");

当我在运行以下查询的 hotchocolate playground 中运行应用程序(运行产品、库存、评论服务)时

query {
  product(upc: 3) {
    name
    inStock
  }
}

我收到了inStock的错误信息

{
  "errors": [
    {
      "message": "Variable `__fields_upc` is required.",
      "extensions": {
        "code": "HC0018",
        "variable": "__fields_upc",
        "remote": {
          "message": "Variable `__fields_upc` is required.",
          "extensions": {
            "code": "HC0018",
            "variable": "__fields_upc"
          }
        },
        "schemaName": "inventory"
      }
    }
  ],
  "data": {
    "product": {
      "name": "Chair",
      "inStock": null
    }
  }
}

我不明白为什么 upc 字段没有通过。 似乎产品服务验证失败,因为我没有看到任何调用库存服务。

任何线索是什么问题?

我正在使用 ASP.NET 6

<PackageReference Include="HotChocolate.AspNetCore" Version="12.9.0" />
<PackageReference Include="HotChocolate.Stitching" Version="12.9.0" />

编辑

似乎$fields:upc没有得到库存模式的解析,因为如果我用 3 的硬编码 upc 更新拼接模式

extend type Product {
  inStock: Boolean
    @delegate(
      schema: "inventory",
      path: "inventoryInfo(upc: 3).isInStock")
}

并查询数据

query {
  product(upc: 3) {
    upc
    name
    inStock
  }
}

我得到了预期的结果

{
  "data": {
    "product": {
      "upc": 3,
      "name": "Chair",
      "inStock": true
    }
  }
}

也没有? 您的第一个查询没有错误所说的“upc”字段。

query {
  product(upc: 3) {
    upc
    name
    inStock
  }
}

我发现了一个与您的场景类似的 graphql 查询示例: https ://chillicream.com/docs/hotchocolate/fetching-data/fetching-from-rest

我知道这可能有点晚了,但我遇到了同样的问题并且能够解决它。 我问了一个类似的问题,最近我添加了一个答案。

如果有人遇到相同的错误,您可以在此处查看解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM