调用Microsoft Graph API phoneMethods返回OpenPropertySegment错误如何解决
问题原因
- 接口端点不匹配:你参考的是Microsoft Graph的接口文档,但实际调用的是已经废弃的Azure AD Graph端点
graph.windows.net,v1.6版本的Azure AD Graph不支持/authentication/phoneMethods这个路径段,这就是报错Unexpected segment OpenPropertySegment的核心原因。 - 接口版本错误:就算切换到正确的服务端点,1.6也是Azure AD Graph的专属版本号,Microsoft Graph的对应接口需要使用beta或v1.0版本标识。
- 获取Token的Scope配置错误:如果你的
GetAccessToken方法之前是为了调用Azure AD Graph写的,请求的Scope也不符合Microsoft Graph的要求。
修复方案
1. 替换请求URL
把原有请求URL直接替换为Microsoft Graph的对应端点,不需要额外携带租户ID和api-version参数:
https://graph.microsoft.com/beta/users/[用户ID]/authentication/phoneMethods
2. 确认接口权限
你的应用需要提前申请对应权限并获得管理员同意:
- 应用权限:
UserAuthenticationMethod.ReadWrite.All - 委托权限:
UserAuthenticationMethod.ReadWrite、UserAuthenticationMethod.ReadWrite.All
3. 调整Token请求配置
修改GetAccessToken方法,请求的Scope改为https://graph.microsoft.com/.default(应用权限场景)或对应委托权限的Scope。
4. 优化请求代码(可选)
避免手动拼接JSON出现语法错误,改用序列化工具生成请求体,修复后的完整参考代码如下:
// 构造请求体 var requestBody = new { phoneType = "mobile", phoneNumber = phone // 注意手机号需要符合E.164格式,示例:+8613xxxxxxxxx }; var json = JsonSerializer.Serialize(requestBody); // 获取Microsoft Graph的Access Token var accessToken = await GetAccessToken(settings); using var http = new HttpClient(); var url = $"https://graph.microsoft.com/beta/users/{userId}/authentication/phoneMethods"; var request = new HttpRequestMessage(HttpMethod.Post, url); request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", accessToken); request.Content = new StringContent(json, Encoding.UTF8, "application/json"); var response = await http.SendAsync(request); // 可打印返回内容排查后续问题 var responseContent = await response.Content.ReadAsStringAsync();
额外注意事项
生产环境使用时可以关注官方接口迭代进度,待接口转正到v1.0版本后将路径中的beta替换为v1.0即可。
内容的提问来源于stack exchange,提问作者glosrob
相关产品推荐
相关产品推荐

