【发布时间】:2021-06-01 16:14:38
【问题描述】:
我正在使用模式拦截器来配置我的模式。这是一个多租户的应用程序,所以我根据租户的配置来构建架构。我将该配置映射到 SDL 语言(模式优先方法),然后将其添加到模式构建器 (schemaBuilder.AddDocumentFromString(...))。
如文档 (here) 中所述,“Schema-first 目前不支持过滤!”。但这是我现在可以使用的唯一方法,所以我正在尝试寻找解决方法。
我尝试过的:
手动创建输入过滤器类型并将过滤器添加到服务器(类似这样):
...
schemaBuilder.AddDocumentFromString(@"
type Query {
persons(where: PersonFilterInput): [Person]
}
input PersonFilterInput {
and: [PersonFilterInput!]
or: [PersonFilterInput!]
name: StringOperationFilterInput
}
input StringOperationFilterInput {
and: [StringOperationFilterInput!]
or: [StringOperationFilterInput!]
eq: String
neq: String
contains: String
ncontains: String
in: [String]
nin: [String]
startsWith: String
nstartsWith: String
endsWith: String
nendsWith: String
}
}
type Person {
name: String
}");
...
//add resolvers
...
关于服务器配置:
services
.AddGraphQLServer()
.TryAddSchemaInterceptor<TenantSchemaInterceptor>()
.AddFiltering();
但是,这还不够,因为没有应用过滤器。
查询:
{
persons (where: { name: {eq: "Joao" }}){
name
}
}
结果:
{
"data": {
"persons": [
{
"name": "Joao"
},
{
"name": "Liliana"
}
]
}
}
有什么办法可以解决这个问题吗?
谢谢大家
【问题讨论】:
标签: asp.net hotchocolate