Azure Graph API按createdDateTime排序用户请求报错问题咨询
问题:Azure Graph API Beta按createdDateTime排序用户返回400错误
我尝试通过Azure Graph API的beta版本,按createdDateTime字段对用户进行排序查询,但请求返回400(Bad Request)错误,请求链接如下:
https://graph.microsoft.com/beta/users?$select=displayName,userPrincipalName,mail,id,createdDateTime,signInActivity,userType&$top=100&$orderby=createdDateTime desc
而使用相同请求结构,按displayName排序时可正常执行:
https://graph.microsoft.com/beta/users?$select=displayName,userPrincipalName,mail,id,createdDateTime,signInActivity,userType&$top=100&$orderby=displayName desc
我的API权限正常,能在查询结果中获取到createdDateTime字段。若此方法不可行,请问获取最近注册的1000个用户的最优方式是什么?
更新于2024年6月15日
多数建议添加ConsistencyLevel和Count参数,但添加后仍出现相同错误,详见Postman截图:
解决方案
针对排序报错的排查与修复
Graph API Beta中对users的createdDateTime字段排序,必须同时满足两个要求:
- 请求头添加
ConsistencyLevel: eventual - 查询参数包含
$count=true
若添加后仍报错,检查以下细节:
- 确认请求头的
ConsistencyLevel拼写正确,值为小写的eventual - 检查URL参数拼接是否正确,完整请求URL示例:
https://graph.microsoft.com/beta/users?$select=displayName,userPrincipalName,mail,id,createdDateTime,signInActivity,userType&$top=100&$orderby=createdDateTime desc&$count=true
- 确保请求方法为GET,无其他语法错误(比如参数符号、空格问题)
获取最近1000个注册用户的替代方案
如果上述方法仍无法解决,可采用以下方式:
- 本地排序法:不使用API排序,每次用
$top=100拉取用户数据,通过@odata.nextLink循环分页获取足够数量的用户后,在本地按createdDateTime降序排序,取前1000个。注意:用户总数过大时效率较低,需处理分页逻辑。 - 时间范围筛选法:通过
$filter缩小查询范围,比如$filter=createdDateTime ge 2023-06-15T00:00:00Z(根据实际情况调整时间),再配合排序和必要的头参数,减少返回数据量后排序更容易成功。 - 切换至v1.0版本:尝试使用Graph API v1.0版本执行排序请求,
createdDateTime字段在v1.0中同样支持排序,可能避开Beta版本的兼容性问题。
内容的提问来源于stack exchange,提问作者BikerP
相关产品推荐
相关产品推荐

