如何在 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 部件?