c# - graphql-dotnet 按操作名称查询
问题描述
我正在使用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
)询问用户,我可以在定义的架构中设置某处。如果我跳过操作名称,则不应执行请求。
我该怎么做?
解决方案
您将 getAllUsers() 映射到错误的位置,您应该将该方法映射为 RootQuery 中的 ListGraphType,然后当您调用类似这样的内容时,它应该返回所有用户。
query getAllUsers
{
users
items {
email
}
}
注意查询getAllUsers是任意的,你可以改成查询getWhatEver,还是会得到同样的结果。但是通过上面的这个 graphql 查询,您将返回一个包含项目字段的用户列表,并且项目具有一个电子邮件字段。如果您只想返回一个对象,则需要映射一个 UserType 字段,该字段本质上将返回您正在寻找的对象。
如果你这样写,查询也将在没有查询 GetAllUsers 的情况下执行
{
users
items {
email
}
}
再次检查文档和示例以获得更多说明。
推荐阅读
- roboflow - 通过 Roboflow API 访问项目是否仅限于付费计划?
- python-3.x - python - 如何在python中获得一个下拉框以显示来自SQlite3的“姓氏,名字”?
- mysql - MySQL如何查询重复结果
- jquery - 在 Laravel 的 ajax JQUERY 请求中找到 302
- microsoft-graph-api - 图表:与会者自动接受活动邀请
- asp.net - 如何在asp.net webforms中增加webform webmethod请求的时间?
- node.js - 如何从环回 4 应用程序向外部 api 发布请求?
- python - 如何一致地拆分这两个字符串?
- vue.js - 切换全日历轴标签
- python - 发生了 uxexpected 错误。Conda 创建了上述报告。上传/报告未发送