如何使用提升的权限从服务器端运行Sharepoint Rest API?

时间:2014-04-16 06:30:01

标签: rest sharepoint

Sharepoint Rest API使用类型为http://mysite/_api/search/query?querytext='search_key'的简单URL将搜索结果作为XML返回。当我直接在浏览器中运行它时,我看到了一个有效的XML响应:

Rest API Output

(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的正确方法是什么?具体来说,从网络方法?它如何作为超级用户运行?

2 个答案:

答案 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直接查询。