Скажем, я хочу иметь возможность запрашивать пользователя, указав его идентификатор, или же, указав другой идентификатор, например адрес электронной почты.
Как вы создаете корневой объект Query, чтобы принять это?
Учитывая это
public class MyQuery : ObjectGraphType
{
public MyQuery(IUserService userService)
{
Name = "Query";
Field<UserType>(
"user",
arguments: new QueryArguments(
new QueryArgument<IntGraphType>() { Name = "id" },
new QueryArgument<StringGraphType>() { Name = "email" }
),
resolve: context =>
{
int? id = context.GetArgument<int>("id");
if (id != null)
{
return userService.GetUserById(id);
}
string email = context.GetArgument<string>("email");
if (email != null)
{
return userService.GetUserByEmail(email);
}
return null;
}
);
}
}
Это правильный способ сделать это? Будет ли context.GetArgument() возвращать null, если он не найдет аргумент в запросе? Или предоставление двух аргументов для QueryArguments означает, что для запроса требуются оба аргумента?


arguments: new QueryArguments(
new QueryArgument<IntGraphType>() { Name = "id" },
new QueryArgument<StringGraphType>() { Name = "email" }
)
Это означает, что эти аргументы допускают значение NULL, что делает их необязательными.
arguments: new QueryArguments(
new QueryArgument<NonNullGraphType<IntGraphType>>() { Name = "id" },
new QueryArgument<NonNullGraphType<StringGraphType>>() { Name = "email" }
)
Обертывание GraphType в NonNullGraphType указывает, что значение не должно быть нулевым, что требует предоставления ненулевого значения.
По умолчанию GetArgument<TType> вернет default(TType), если аргумент не существует. Вы также можете использовать:
context.GetArgument<string>("email", defaultValue: "my default value");
Да. Указывать значение по умолчанию необязательно (defaultValue - необязательный параметр). По умолчанию для строки будет null.
Итак, я мог бы заставить
GetArgument<TType>вернутьnull, если аргумент не существует, выполнивcontext.GetArgument<string>("email", defaultValue: null)?