内容丰富的.NET SDK查询失败

时间:2020-07-09 12:20:23

标签: contentful headless-cms

更新1 2020年7月9日:至少有两个问题。抱歉,我无法让编辑器正确设置文本格式。

  1. 字段名称必须具有一个字段。前缀。

    QueryBuilder queryBuilder = QueryBuilder.New.FieldExists(“ fields.myurl”,true).FieldEquals(“ fields.myurl”,“ /”);

  2. 似乎有必要迭代内容类型。

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

    未处理的异常。 Contentful.Core.Errors.ContentfulException:内容类型ID是必需的。查询条目并涉及字段时,您需要将查询限制为特定的内容类型。请发送内容类型ID(而非名称)作为URI查询参数“ content_type” 位于C:\ temp \ deliverystack \ Contentful.Core \ ContentfulClientBase.cs:line 142中的Contentful.Core.ContentfulClientBase.CreateExceptionForFailedRequest(HttpResponseMessage res) 在C:\ temp \ deliverystack \ Contentful.Core \ ContentfulClientBase.cs:line 320中的Contentful.Core.ContentfulClientBase.EnsureSuccessfulResult(HttpResponseMessage response) 在C:\ temp \ deliverystack \ Contentful.Core \ ContentfulClientBase.cs:line 264中的Contentful.Core.ContentfulClientBase.SendHttpRequest(HttpRequestMessage request,CancellationToken cancelToken)处 在C:\ temp \ deliverystack \ Contentful.Core \ ContentfulClientBase.cs:line中的Contentful.Core.ContentfulClientBase.SendHttpRequest(字符串url,HttpMethod方法,字符串authToken,CancellationToken cancellingToken,HttpContent内容,可空1 version, String contentTypeId, String organisationId, List 1个附加标头)中257 在C:\ temp \ deliverystack \ Contentful.Core \ ContentfulClient.cs:line 654中的Contentful.Core.ContentfulClient.Get(字符串url,CancellationToken cancelleToken) 在C:\ temp \ deliverystack \ Contentful.Core \ ContentfulClient.cs:line 188中的Contentful.Core.ContentfulClient.GetEntries [T](String queryString,CancellationToken cancelestToken)处 在C:\ temp \ deliverystack \ Contentful.Core \ ContentfulClient.cs:line 171中的Contentful.Core.ContentfulClient.GetEntries [T](QueryBuilder`1 queryBuilder,CancellationToken cancelleToken)处 在C:\ temp \ deliverystack \ cfclt \ Program.cs:line 33中的cfclt.Program.Main(String [] args)处

这可行:

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/)来实现Web应用程序的内容交付层。

我的第一个问题是如何将传入的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

我相对确定在URL字段中存在firstContentType条目,其值为/。我在做什么错了?

为什么/如何用无头CMS做如此基本的事情如此困难?看到这个;就像一个兔子洞,我没有时间去探索。

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

如果需要,我不介意迭代内容类型,但是如果查询仍然无法正常工作,我不确定是否值得付出努力?

1 个答案:

答案 0 :(得分:0)

您需要指定要过滤的字段的完整路径。因此.FieldExists("fields.url", true).FieldEquals("fields.url", "/")应该可以解决问题。

相关问题