使用Kotlin版Microsoft Graph SDK通过UPN获取来宾用户遇404问题
无法通过Kotlin版Microsoft Graph客户端使用userPrincipalName获取来宾用户(404错误)
问题详情
尝试通过Kotlin版Microsoft Graph客户端获取来宾用户,参考相关帖子将UPN中的#替换为%23,甚至额外将@替换为%40,但始终收到404 Not Found响应。已确认该来宾用户账号存在,在Graph Explorer中执行相同查询可成功找到目标用户。
尝试过的代码
// 仅编码#的写法 val upn = "hans.muster_somecompany.com%23EXT%23@mydomain.onmicrosoft.com" client.users(upn) .buildRequest() .select(USER_FIELDS) .get()
// 编码#和@的写法 val upn = "hans.muster_somecompany.com%23EXT%23%40mydomain.onmicrosoft.com" client.users(upn) .buildRequest() .select(USER_FIELDS) .get()
解决方案:改用filter查询参数
Kotlin版Graph客户端对路径参数的自动编码逻辑可能导致手动编码的字符被二次转义,引发匹配失败。改用filter参数指定userPrincipalName即可避免该问题:
// 使用原始UPN,无需手动编码 val upn = "hans.muster_somecompany.com#EXT#@mydomain.onmicrosoft.com" client.users() .buildRequest() .select(USER_FIELDS) .filter("userPrincipalName eq '$upn'") .get()
原因分析
当把编码后的UPN作为路径参数传入client.users(upn)时,客户端会自动对整个参数再次进行URL编码,导致原本的%23被转成%2523,服务器无法识别该编码后的UPN,因此返回404。而使用filter参数时,客户端会正确处理UPN的编码,确保查询条件准确传递。
内容的提问来源于stack exchange,提问作者Irina S.
相关产品推荐
相关产品推荐

