Ошибки запросов Contentful .NET SDK

Обновление 1 9. июля 2020: как минимум два выпуска. Извините, я не могу заставить редактор правильно отформатировать текст.

  1. Имена полей должны содержать поля. префикс.

    QueryBuilder queryBuilder = QueryBuilder.New.FieldExists ("fields.myurl", истина).FieldEquals("fields.myurl", "/");

  2. Кажется необходимым перебрать типы контента.

    https://cdn.contentful.com/spaces/qjiunow8a0ig/entries?fields.myurl[exists]=true&fields.myurl=%2F

    Необработанное исключение. Contentful.Core.Errors.ContentfulException: требуется идентификатор типа контента. При запросе записей и вовлечении полей вам необходимо ограничить свой запрос определенным типом контента. Отправьте идентификатор типа контента (а не имя) в качестве параметра запроса URI "content_type" в Contentful.Core.ContentfulClientBase.CreateExceptionForFailedRequest(HttpResponseMessage res) в C:\temp\deliverystack\Contentful.Core\ContentfulClientBase.cs: строка 142 на Contentful.Core.ContentfulClientBase.EnsureSuccessfulResult(ответ HttpResponseMessage) в C:\temp\deliverystack\Contentful.Core\ContentfulClientBase.cs: строка 320 в Contentful.Core.ContentfulClientBase.SendHttpRequest(HttageTempRequest) \ inCancellessokensequestMessage (запрос C:\temp\deliverystack\Contentful.Core\ContentfulClientBase.cs: строка 264 в Contentful.Core.ContentfulClientBase.SendHttpRequest(String url, метод HttpMethod, String authToken, CancellationToken cancellationToken, HttpContent content, Nullable1 version, String contentTypeId, String organisationId, List1 additionalHeaders) в C:\temp\deliverystack\Contentful.Core\ContentfulClientBase.cs: строка 257 в Contentful.Core.ContentfulClient.Get(String url, CancellationToken cancellationToken) в C:\temp\deliverystack\Contentful.Core\ContentfulClient.cs: строка 654 в Contentful.Core.ContentfulClient.GetEntries[T](String queryString, CancellationToken cancellationToken) в C: \ temp \ deliverystack \ Contentful.Core \ContentfulClient.cs: строка 188 в Contentful.Core.ContentfulClient.GetEntries[T](QueryBuilder`1 queryBuilder, CancellationToken cancellationToken) в C: \ temp \ deliverystack \ Contentful.Core \ContentfulClient.cs: строка 171 в cfclt.Program.Main(String[] args) в C:\temp\deliverystack\cfclt\Program.cs: строка 33

Итак, это работает:

QueryBuilder<Entry> queryBuilder = QueryBuilder<Entry>.New.ContentTypeIs("firstContentType").FieldExists("fields.url", true).FieldEquals("fields.url", "/");

Думаю, я буду перебирать типы контента и создавать потоки для запросов.

Оригинальная тема:

Я хотел бы использовать Contentful.NET SDK (https://www.contentful.com/developers/docs/net/) для реализации уровня доставки контента для веб-приложения.

Одна из моих первых проблем - как сопоставить входящий HTTP-запрос с записью в Contentful без сохранения какой-либо соответствующей конфигурации на уровне доставки контента. Я хочу передать URL-адрес, и SDK вернет гидратированный объект соответствующего типа.

Я помещаю текстовое поле с именем URL в свои записи, в которых должны быть URL-адреса. Я хочу запросить все типы контента, чтобы найти любые записи, которые имеют определенное значение в этом поле URL.

Я пробовал несколько запросов, но всегда получаю исключения:

QueryBuilder<Entry> queryBuilder = QueryBuilder<Entry>.New.ContentTypeIs("firstContentType").FieldExists("url", true).FieldEquals("url", "/");
ContentfulCollection<Entry> entries = client.GetEntries(queryBuilder).GetAwaiter().GetResult();

Unhandled exception. Contentful.Core.Errors.ContentfulException: The query you sent was invalid. Probably a filter or ordering specification is not applicable to the type of a field.[
  {
    "name": "unknown",
    "path": [
      "url"
    ],
    "details": "The path \"url\" is not recognized"
  }
]
   at Contentful.Core.ContentfulClientBase.CreateExceptionForFailedRequest(HttpResponseMessage res) in C:\temp\deliverystack\Contentful.Core\ContentfulClientBase.cs:line 142
   at Contentful.Core.ContentfulClientBase.EnsureSuccessfulResult(HttpResponseMessage response) in C:\temp\deliverystack\Contentful.Core\ContentfulClientBase.cs:line 320
   at Contentful.Core.ContentfulClientBase.SendHttpRequest(HttpRequestMessage request, CancellationToken cancellationToken) in C:\temp\deliverystack\Contentful.Core\ContentfulClientBase.cs:line 264
   at Contentful.Core.ContentfulClientBase.SendHttpRequest(String url, HttpMethod method, String authToken, CancellationToken cancellationToken, HttpContent content, Nullable`1 version, String contentTypeId, String organisationId, List`1 additionalHeaders) in C:\temp\deliverystack\Contentful.Core\ContentfulClientBase.cs:line 257
   at Contentful.Core.ContentfulClient.Get(String url, CancellationToken cancellationToken) in C:\temp\deliverystack\Contentful.Core\ContentfulClient.cs:line 654
   at Contentful.Core.ContentfulClient.GetEntries[T](String queryString, CancellationToken cancellationToken) in C:\temp\deliverystack\Contentful.Core\ContentfulClient.cs:line 188
   at Contentful.Core.ContentfulClient.GetEntries[T](QueryBuilder`1 queryBuilder, CancellationToken cancellationToken) in C:\temp\deliverystack\Contentful.Core\ContentfulClient.cs:line 171

Я относительно уверен, что есть запись firstContentType со значением / в поле URL. Что я делаю не так?

Почему / как может быть так сложно сделать что-то столь простое с помощью безголовой CMS? Видеть это; это похоже на кроличью нору, которую у меня нет времени исследовать.

https://www.contentfulcommunity.com/t/how-to-query-on-multiple-content-types/473/10

При необходимости я бы не отказался от повторения типов контента, но я не уверен, что это того стоит, если запрос все равно не работает?

1 ответ

Решение

Вам необходимо указать полный путь к полю, по которому вы фильтруете. Так.FieldExists("fields.url", true).FieldEquals("fields.url", "/") должен сделать свое дело.

Другие вопросы по тегам