Sharepoint Rest API使用类型为http://mysite/_api/search/query?querytext='search_key'
的简单URL将搜索结果作为XML返回。当我直接在浏览器中运行它时,我看到了一个有效的XML响应:
(1)我是否正确地假设上述响应是使用当前用户的授权生成的?
(2)可以从服务器端调用此URL吗?我在Web方法(WCF Web服务)中尝试过它,但收到了401 - Unauthorized
:
public string GetSearchResults(string searchKey)
{
string webURL = SPContext.Current.Web.Url;
string searchURL = webURL + "/_api/search/query?querytext='" + searchKey + "'";
WebClient client = new WebClient();
string xmlResponse = client.DownloadString(searchURL); // throws 401
// parse xmlResponse and return appropriately
}
(3)我真正需要的是能够获取搜索结果而不管当前用户的访问权限(要求是用户将看到所有搜索结果,并选择“请求“在需要时”访问。
我在上面的网络方法中试过这个,但它仍然会抛出相同的401
:
public string GetSearchResults(string searchKey)
{
string webURL = SPContext.Current.Web.Url;
string searchURL = webURL + "/_api/search/query?querytext='" + searchKey + "'";
string xmlResponse;
SPSecurity.RunWithElevatedPrivileges(delegate()
{
WebClient client = new WebClient();
xmlResponse = client.DownloadString(searchURL); // still 401
});
// parse xmlResponse and return appropriately
}
从服务器端调用Rest URL的正确方法是什么?具体来说,从网络方法?它如何作为超级用户运行?
答案 0 :(得分:1)
要执行REST请求,请通过WebClient.Credentials Property
对请求进行身份验证On Premise(您的场景)
WebClient client = new WebClient();
client.Credentials = new NetworkCredential(userName,password,domain);
SharePoint Online
WebClient client = new WebClient();
client.Credentials = new SharePointOnlineCredentials(username,securedPassword);
client.Headers.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f");
答案 1 :(得分:0)
搜索结果始终由SharePoint进行安全修整,因此要使其工作,您需要在指定Vadim所述的新凭据后运行查询。这几乎肯定不是一个好主意。如果您已经在运行代码服务器端,请不要使用REST接口,只需使用搜索API直接查询。