我如何在我的web方法中使用提升的特权获取API URL的响应

本文关键字:特权 获取 响应 URL API 我的 web 方法 | 更新日期: 2023-09-27 17:50:52

我们有一个带有表单webURL + "/_api/search/query?querytext='" + query + "'"; URL的搜索API,需要它的响应来生成页面上的内容。这个URL可以通过AJAX直接访问,但是这个URL只能由管理员用户访问。为了让普通用户使用搜索功能,解决方法是调用一个web方法,该方法使用提升的权限返回调用API的URL。

我们有如下代码,但我们不确定如何使用提升的权限打开API的URL并返回响应。

public string GetSearchListItems(string query)
{
    var superUser = SPContext.Current.Web.AllUsers[@"SHAREPOINT'SYSTEM"];
    var superToken = superUser.UserToken;
    var webURL = SPContext.Current.Web.Url;
    using (var site = new SPSite(webURL, superToken))
    {
        string searchURL = webURL + "/_api/search/query?querytext='" + query + "'" +"&rowlimit=4&sortlist='ViewsLifeTime:descending'";
        using (var elevatedWeb = site.OpenWeb())
        {
            // code to open searchURL using elevated privileges and return the response of searchURL
        }
    }
}

我们尝试了下面的注释来代替上面的注释:

WebClient client = new WebClient();
string response = client.DownloadString(searchURL);
return response;

…但是这会导致401(未授权)异常。

我们如何将提升的特权(SharePoint'System帐户)集成到打开搜索API的URL?

我如何在我的web方法中使用提升的特权获取API URL的响应

您是否尝试过包装您在RunWithElevatedPrivileges()委托中注释的代码?

SPSecurity.RunWithElevatedPrivileges(delegate()
{
WebClient client = new WebClient();
string response = client.DownloadString(searchURL);
return response;
});