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

Posted

技术标签:

【中文标题】如何在 SharePoint 框架 Web 部件中调用 SharePoint 搜索 API 以获取最近的新闻?【英文标题】:How do I call the SharePoint Search API for Recent News within a SharePoint Framework webpart? 【发布时间】:2021-09-28 07:36:35 【问题描述】:

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

这是我的代码 sn-p:

  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

我继续得到相同的结果。

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

嘿@MichaelHan_MSFT 这让我走得更远,但现在它说我未经授权。有小费吗? \"odata.error\":\"code\":\"-2147024891, System.UnauthorizedAccessException\",\"message\":\"lang\":\"en-US\",\" value\":\"试图执行未经授权的操作。\" 您似乎没有访问该网站的权限。 我认为我拥有该网站。但是我已登录该站点,我已经发布了我的自定义应用程序(SharePoint 框架),我正在使用this.context.spHttpClient——这可能是因为完全限定的 URL 吗?我应该通过相对路径吗?如果我抓取请求 URL 并将其放入浏览器地址栏中,那么我会看到我期望的结果。 搜索 api 上似乎有严格的 CORS 配置。我有两个网站。开发和分期。我在开发人员中使用切换代码时的相对 url 进行测试,以便搜索查询的 url 与安装应用程序的站点匹配——然后一切都按预期工作。 -- 相关,我可以跨站调用 _api/web/lists 但不能搜索。

以上是关于如何在 SharePoint 框架 Web 部件中调用 SharePoint 搜索 API 以获取最近的新闻?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SharePoint2013 的 SharePoint Web Access Web 部件中访问 Excel PROTECTED 电子表格?

如何在 sharepoint 2007 中列出和编辑所有 Web 部件的 html?

sharepoint 2010 如何创建带有树视图的 Web 部件?

在 sharepoint 中连接 Web 部件

如何在 Sharepoint 2010 Web 部件页中正确更新站点图标

如何在 Sharepoint 中配置 Web 部件的设置?