如何在 SharePoint 框架 Web 部件中调用最近新闻的 SharePoint 搜索 API?

问题描述

我正在使用 SharePoint 框架创建一个 webpart,我正在尝试使用搜索 API 来获取一些最近的新闻文章以创建新闻轮播。

这是我的代码片段:

  private async _getNewsFeedSearchResults() : Promise<string> {
    let request_url = `https://[mytenant].sharepoint.com/sites/test-site/_api/search/query?querytext='(IsDocument:True)+AND+(FileExtension:aspx)+AND+(PromotedState:2)'`;
    const response = await this.context.spHttpClient.get(request_url,SPHttpClient.configurations.v1);
    return await response.text();
  }

我从 SharePoint 得到的回复是:

{"error":{"code":"-1,Microsoft.SharePoint.Client.UnkNownError","message":"未知错误"}}

我怀疑问题出在我的 QueryText 上:

/_api/search/query?querytext='(IsDocument:True)+AND+(FileExtension:aspx)+AND+(PromotedState:2)'

我也试过

/_api/search/query?QueryText=%27((IsDocument%3ATrue)%20AND%20(FileExtension%3Aaspx)%20AND%20(PromotedState%3A2))%27

我继续得到相同的结果。

解决方法

您的 QueryText 很好。您需要将 OData 版本标头指定为 v3,因为搜索 API 不支持 v4。

const response = await this.context.spHttpClient.get(
  request_url,SPHttpClient.configurations.v1,{
    headers: {
      "odata-version": "3.0",},}
);