使用Microsoft Graph SDK for Java获取用户有权访问的所有SharePoint站点时遇到语法错误问题
我完全懂你现在的困扰——用委托权限调用graphClient.sites().get()拿不到任何站点,查到用search=*的API直接调用能返回用户有权访问的所有站点,但换成SDK代码就报语法错误。其实问题出在你对SDK参数的理解上,我来给你捋清楚:
问题根源
你直接调用的https://graph.microsoft.com/v1.0/sites?search=*里的search是SharePoint站点端点的自定义查询参数,不是标准OData规范里的$search参数。而你之前用的requestConfiguration.queryParameters.search对应的是OData的$search,这个参数的语法规则不允许单独用*当搜索词,所以才会抛出那个“*字符无效”的错误。
解决方案
要添加这个自定义的search参数,你需要用SDK里的urlParameters来手动追加,而不是用queryParameters下的search字段。修改后的代码应该是这样:
SiteCollectionResponse result = graphClient.sites().get(requestConfiguration -> { // 手动添加自定义search参数,避开OData$search的语法限制 requestConfiguration.urlParameters.add("search", "*"); });
额外注意事项
- 确保你已经在Azure AD应用里配置了
Sites.Read.All这个委托权限,并且获取的访问令牌包含该权限; - 如果还是有问题,可以检查下SDK版本,或者尝试切换到beta端点(不过v1.0版本已经支持这个参数了,大概率不需要)。
备注:内容来源于stack exchange,提问作者vulej
相关产品推荐
相关产品推荐

