使用C# SDK调用Microsoft Graph API的subscribedSkus时GUID格式错误求助
解决Microsoft Graph API获取SubscribedSku时的"Invalid object identifier"错误
问题原因
你遇到的错误是因为SubscribedSku的标识符必须是[租户GUID]_[SKU GUID]的格式,而不是单独的SKU GUID。Graph API要求通过这种复合ID来唯一标识租户下的订阅SKU。
解决方案
方法1:先获取所有SubscribedSkus,筛选目标SKU的完整ID
如果不知道租户ID,可以先调用接口获取所有订阅SKU,从中找到目标SKU的id字段(格式就是tenantId_skuId),再用这个完整ID调用单个SKU的接口:
public async Task<SubscribedSku> GetAvailableLicenceDetails(string targetSkuId) { try { string accessToken = await tokenAcquisition.GetAccessTokenForUserAsync(new string[] { "Organization.Read.All" }); var authenticationProvider = new BaseBearerTokenAuthenticationProvider(new TokenProvider(accessToken)); var graphServiceClient = new GraphServiceClient(authenticationProvider); // 获取所有订阅SKU var subscribedSkus = await graphServiceClient.SubscribedSkus.GetAsync(); // 筛选出目标SKU(匹配skuId部分) var targetSku = subscribedSkus.Value.FirstOrDefault(sku => sku.SkuId.ToString() == targetSkuId); if (targetSku == null) { throw new ArgumentException("未找到指定的SKU"); } return targetSku; } catch (ODataError odataError) { Console.WriteLine(odataError.Error.Code); Console.WriteLine(odataError.Error.Message); throw; } } // 调用时传入SKU GUID var sku = await GetAvailableLicenceDetails("6fd2c87f-b296-42f0-b197-1e91e994b900");
方法2:手动拼接租户ID和SKU ID
如果你已经知道租户ID(可通过Azure门户查看或调用/organization接口获取),直接拼接成{tenantId}_{skuId}格式传入:
// 替换为你的租户GUID string tenantId = "你的租户GUID"; string skuId = "6fd2c87f-b296-42f0-b197-1e91e994b900"; var sku = await GetAvailableLicenceDetails($"{tenantId}_{skuId}");
注意事项
- 确保已为应用或用户正确授予
Organization.Read.All权限,且权限已获得管理员同意(委托权限场景)。 - 若使用应用权限,需调用
tokenAcquisition.GetAccessTokenForAppAsync而非用户权限方法。
内容的提问来源于stack exchange,提问作者RyptHunterz
相关产品推荐
相关产品推荐

