You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用MS Graph SDK V4.54.0获取指定用户关注的SharePoint站点的高效方案咨询

MS Graph SDK V4.54.0获取指定用户关注的SharePoint站点的高效方案咨询

你猜的完全没错!Users[userEmailAddress].FollowedSites这个SDK调用对应的Graph API端点其实并不存在——目前微软只开放了/me/followedSites用于获取当前用户关注的SharePoint站点,直接调用其他用户的这个路径自然会抛出你看到的通用处理异常。

你自己写的遍历所有站点+检查用户信息列表的方法确实效率极低,完全不适合生产环境,下面给你两个高效的替代方案:

方案一:通过用户Profile的关注列表筛选站点

这个方法直接调用Graph API获取用户所有关注的对象,再筛选出类型为站点的内容,性能和准确性都有保障:

代码示例

var graphClient = GetMSGraphClient_WithClientSecret();
string targetUserUPN = "目标用户邮箱@域名.com"; // 替换为实际用户的UPN或邮箱

// 获取用户关注的所有对象,并筛选站点类型
var followingItems = await graphClient.Users[targetUserUPN]
    .Profile
    .Following
    .Request()
    .Filter("entityType eq 'site'") // 只保留站点类型的关注项
    .GetAsync();

// 将关注项映射为Site对象(按需提取属性)
var followedSites = followingItems.Select(item => new Site
{
    Id = item.Id,
    WebUrl = item.WebUrl,
    DisplayName = item.DisplayName
}).ToList();

Assert.IsTrue(followedSites.Count > 0);

权限要求

需要配置以下应用权限(或委托权限,根据你的认证方式选择):

  • User.Read.All(获取用户Profile信息)
  • Sites.Read.All(读取站点基本信息)

方案二:使用Graph搜索API筛选用户关注的站点

如果方案一无法满足你的需求(比如需要更多站点属性),可以用Graph的站点搜索功能,直接搜索被目标用户关注的站点:

代码示例

var graphClient = GetMSGraphClient_WithClientSecret();
string targetUserUPN = "目标用户邮箱@域名.com";

var followedSites = new List<Site>();
var searchRequest = graphClient.Sites
    .Search($"followedBy:{targetUserUPN}") // 搜索条件:被指定用户关注的站点
    .Request();

// 处理分页结果(避免只获取第一页)
do
{
    var resultPage = await searchRequest.GetAsync();
    followedSites.AddRange(resultPage);
    searchRequest = resultPage.NextPageRequest;
} while (searchRequest != null);

Assert.IsTrue(followedSites.Count > 0);

权限要求

需要配置Sites.Read.All应用权限(或委托权限)。

额外说明

  • 如果你只是测试环境使用,可以尝试Graph Beta版本的/beta/users/{user-id}/followedSites端点,但Beta版本的API不稳定,官方不建议用于生产环境。
  • 绝对不要继续使用你原来的遍历方案,它的时间复杂度是O(n*m),随着站点数量增加会完全不可用。

备注:内容来源于stack exchange,提问作者TechyGypo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 13:23:17