我正在尝试使用.Net和GraphQL构建一个应用程序。我要去拿材料。不是所有的,而是给定的Ids。当我通过操场或客户端传递它时,我在调试时没有任何问题,但是我不知道如何在服务器端解析。
name: "materialsByIds",
arguments: new QueryArguments(
new QueryArgument<ListGraphType<IntGraphType>> { Name = "ids"}),
resolve: async (context) =>
{
var ids = context.GetArgument<IntGraphType>("ids");
// Do some action to bring datas
// Send data back
}我在这里遗漏了什么?有什么方法可以把这个解析成int列表吗?
发布于 2022-03-14 23:44:04
不要使用GraphType检索参数,而是使用所需的.NET类型。
name: "materialsByIds",
arguments: new QueryArguments(
new QueryArgument<ListGraphType<IntGraphType>> { Name = "ids"}),
resolve: async (context) =>
{
var ids = context.GetArgument<List<int>>("ids");
// Do some action to bring datas
// Send data back
}发布于 2022-03-14 16:54:00
您可以使用MediatR。创建一个查询类并将其传递给mediateR。在CQRS中,命令用于在DB上写入(CRUD的创建/删除/更新),查询用于从DB中读取(CRUD的读取)。
创建'GetMaterialsByIdsQuery'并在其中编写代码,通过Id获取材料。然后在'resolve'内部像这样使用它:
resolve: async context =>
{
var ids = context.GetArgument<List<int>>("ids");
return await mediator.Send(new GetMaterialsByIdsQuery(ids));
})另一种方法是可以返回一些类似于MaterialsRepository.GetMaterialsByIds(ids)的内容,而不是使用mediatR。但是这里不建议使用存储库。您可以创建一个服务类,在它内部使用您的存储库,然后在这里使用您的服务。
https://stackoverflow.com/questions/71465305
复制相似问题