1

我正在尝试从应用程序中使用 sharepoint 在线搜索 api (/_api/search)。从 Azure 门户添加它我看到搜索仅在“委派权限”部分中。当我使用用户登录进行测试并批准它时,它运行良好。因为我不想让用户登录,所以我找到了这篇文章

https://blogs.msdn.microsoft.com/vesku/2016/03/07/using-add-in-only-app-only-permissions-with-search-queries-in-sharepoint-online/

这让我相信可以将搜索仅用作应用程序而不是用户。我按照所有步骤,通过 appregnew.aspx 创建了应用程序,我还通过 appinv.aspx 添加了另一个权限,所以我要求的权限如下:

<AppPermissionRequests AllowAppOnlyPolicy="true">
    <AppPermissionRequest Scope="http://sharepoint/content/tenant" Right="FullControl" />
    <AppPermissionRequest Scope="http://sharepoint/search" Right="QueryAsUserIgnoreAppPrincipal" />
</AppPermissionRequests>

我正在使用 ADAL JAVA SDK 进行测试,如下所示:

Future<AuthenticationResult> future = context.acquireToken(
                resource, new ClientCredential(clientId,
                        clientSecret), null);

其中资源是 xxxxxx.sharepoint.com,我稍后将使用此令牌作为不记名令牌。

但是,当我尝试对此进行测试时,出现以下错误:

2018-08-05 11:03:22 WARN ODataUtils:120 - 无法获得 uri [ https://XXXXXX.sharepoint.com/_api/search]的成功响应,原因 [{"error_description":"服务器是由于内部错误而无法处理请求。有关该错误的更多信息,请在服务器上打开 IncludeExceptionDetailInFaults(来自 ServiceBehaviorAttribute 或来自配置行为)以便将异常信息发送回客户端,或者打开根据 Microsoft .NET Framework SDK 文档进行跟踪并检查服务器跟踪日志。"}];

由于这是在线共享点,我没有服务器,也没有使用 .NET 框架,所以我还有什么其他方法可以调试它?或其他想法我在这里做错了什么?

任何帮助将不胜感激。

4

1 回答 1

-2

也许你可以使用Java调用SharePoint Search Api并显示结果(但我们需要花很多时间去研究,有很多不确定性。)

您的最佳选择是使用 VisualStudio 来测试 SharePoint 插件。微软对此提供了更多支持,您可以使用现成的模板。

您可以使用 SharePoint 为搜索加载项提供的各种搜索相关 API:
.NET 客户端对象模型 (CSOM) 密钥库:Microsoft.SharePoint.Client.Search.dll;Silverlight CSOM 密钥库:Microsoft.SharePoint。 Client.Search.Silverlight.dll ; ECMAScript (JavaScript, JScript) 对象模型 (JSOM) 关键库:SP.search.js ;</p>

搜索 REST API http://server/_api/search/query

一些演示代码: 客户端对象模型 (CSOM) C#

using (ClientContext clientContext = new ClientContext("http://localhost"))
{
    KeywordQuery keywordQuery = new KeywordQuery(clientContext);
    keywordQuery.QueryText = "*";
    SearchExecutor searchExecutor = new SearchExecutor(clientContext);
    ClientResult<ResultTableCollection> results = 
        searchExecutor.ExecuteQuery(keywordQuery);
    clientContext.ExecuteQuery();
}

JavaScript 对象模型 (JSOM)

var keywordQuery = new
Microsoft.SharePoint.Client.Search.Query.KeywordQuery(context);
keywordQuery.set_queryText('SharePoint');
var searchExecutor = new Microsoft.SharePoint.Client.Search.Query.SearchExecutor(context);
results = searchExecutor.executeQuery(keywordQuery);
context.executeQueryAsync(onQuerySuccess, onQueryFail);

REST HTTP GET 请求 HTML

http://mylocalhost/_api/search/query?querytext='SharePoint'

HTTP POST 请求 HTML

{
'__metadata' : {'type' : 'Microsoft.Office.Server.Search.REST.SearchRequest'},
'Querytext' : 'SharePoint'
}

然后通过 VisualStudio 和“Napa”Office 365 开发工具设置权限

有关搜索添加的更多信息: https ://docs.microsoft.com/en-us/sharepoint/dev/general-development/search-add-ins-in-sharepoint

于 2018-08-06T13:22:20.413 回答