Я использую graphql-dotnet для построения сервера graphql в Net Core 2.2 Web API.
Описание схемы:
Iиметь 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
), которое я могу установить где-нибудь в схеме определения.Более того, если я пропущу имя операции, запрос не должен выполняться.
Как я могу это сделать?