我正在使用graphql-dotnet在 Net Core 2.2 Web API 中构建 graphql 服务器。
架构说明:
我有一个ObjectGraphType
喜欢下面
public class UserType
: ObjectGraphType<Users>
{
public UserType()
{
Field(x => x.ContactNumber);
Field(x => x.Email, true);
Field(x => x.Fax);
}
}
}
我有一个查询定义,例如
public class UserOperationNameQuery
: ObjectGraphType
{
public UserOperationNameQuery()
{
Name = "getAllUsers";
Field<ListGraphType<UserType>>(name: "items", description: "Get all users",
resolve: context =>
{
// resolver
});
}
我的架构是
public class GraphQLSchema
: Schema
{
public GraphQLSchema(IDependencyResolver resolver)
: base(resolver)
{
Query = resolver.Resolve<UserOperationNameQuery>();
}
}
我的控制器方法是:
[HttpPost]
public async Task<IActionResult> Post([FromBody] GraphQLQuery query)
{
if (query == null) { throw new ArgumentNullException(nameof(query)); }
var inputs = query.Variables.ToInputs();
var executionOptions = new ExecutionOptions
{
Schema = _schema,
Query = query.Query,
Inputs = inputs,
OperationName = query.OperationName,
};
var result = await _documentExecuter.ExecuteAsync(executionOptions).ConfigureAwait(false);
if (result.Errors?.Count > 0)
{
return BadRequest(result);
}
return Ok(result);
}
询问:
我发送此查询
query getAllUsers
{
items {
email
}
}
这是作品。
但是,如果我更改任何值的操作名称,查询也会执行并获得用户。
query getAllCompanies
{
items {
email
}
}
我可以在请求中写入任何操作名称,它将成功执行。
我只想通过某些操作名称(在我的情况下getAllUsers
)询问用户,我可以在定义的架构中设置某处。如果我跳过操作名称,则不应执行请求。
我该怎么做?