#c# #graphql #hotchocolate
Вопрос:
Я объявил класс модели, подобный приведенному ниже.
public class FunctionalOrganization : IOrganization
{
public Guid Id { get; set; }
public string LegalName { get; set; }
public string Name { get; set; }
public IAddress LegalAddress { get; set; }
}
И интерфейс IAddress выглядит так, как показано ниже
public interface IAddress : IModel
{
string PrimaryLine { get; set; }
string AdditionalLine { get; set; }
string Country { get; set; }
}
И реализация (UnitedStatesAddress) (один из) IAddres выглядит следующим образом
public class UnitedStatesAddress : IAddress
{
public string PrimaryLine { get; set; }
public string AdditionalLine { get; set; }
public string Country { get; set; }
public Guid Id { get; set; }
public string City { get; set; }
public string ZipCode { get; set; }
public string State { get; set; }
}
Если я хочу запросить API Graphql для получения города, почтового индекса и штата с адреса IAddress, он не выдает и не показывает ошибку.
query {
organizationById (organizationId: "00000000-0000-0000-0000-000000000001"){
legalName
legalAddress {
country
primaryLine
additionalLine
state
}
id
registeredOn
asResponder {
settings {
isVisible
dataCenterLocation
}
}
}
}
и ошибка выглядит так, как показано ниже.
{
"errors": [
{
"message": "The field `state` does not exist on the type `Address`.",
"locations": [
{
"line": 8,
"column": 7
}
],
"path": [
"organizationById",
"legalAddress"
],
"extensions": {
"type": "Address",
"field": "state",
"responseName": "state",
"specifiedBy": "http://spec.graphql.org/June2018/#sec-Field-Selections-on-Objects-Interfaces-and-Unions-Types"
}
}
]
}
Может ли кто-нибудь помочь мне решить эту проблему ?
Комментарии:
1. вы должны добавить состояние в IAdress, потому что у LegalAdress есть IAdress типа не UnitedStateAdress
Ответ №1:
Вы должны выбрать реализацию интерфейса в запросе
query {
organizationById (organizationId: "00000000-0000-0000-0000-000000000001"){
legalName
legalAddress {
country
primaryLine
additionalLine
... on UnitedStatesAddress {
state
}
}
id
registeredOn
asResponder {
settings {
isVisible
dataCenterLocation
}
}
}
}