如何将Sharepoint在线搜索api用作仅应用程序

时间:2018-08-05 08:09:47

标签: sharepoint sharepoint-online sharepoint-api sharepoint-apps sharepoint-rest-api

我正在尝试从应用程序使用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框架,所以我还必须通过什么其他方式调试它?或其他想法我在这里做错了吗?

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:-1)

也许您可以使用Java来调用SharePoint Search Api并显示结果(但我们需要花很多时间对此进行研究,但存在很多不确定性。)

最适合您的选择是使用VisualStudio测试SharePoint加载项。 Microsoft提供了更多支持,您可以使用现成的模板。

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

搜索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