запрос graphql-dotnet по имени операции - PullRequest
0 голосов
/ 25 февраля 2019

Я использую 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), которое я могу установить где-нибудь в схеме определения.Более того, если я пропущу имя операции, запрос не должен выполняться.

Как я могу это сделать?

...