问题描述
我正在尝试通过PowerBI的api从PowerBI检索仪表板和报告的列表。在我的previous post中,我与api的连接存在问题。我修好了。
我正在使用Microsoft提供的PowerBI最新软件包。
现在,我正在尝试使用以下代码获取特定组中的仪表板或报告的列表:
if (await CreatePowerBIClient())
{
var dashboards = await client.Dashboards.GetDashboardsInGroupAsync(new Guid(SettingsModels.GroupId));
var reports = await client.Reports.GetReportsInGroupAsync(new Guid(SettingsModels.GroupId));
// doing something else with the list
}
我从网址中抓取groupId
我得到的是一个错误
Microsoft.Rest.HttpOperationException:操作返回了无效的状态码'NotFound'
然后,我认为这是配置错误。然后,我尝试从Microsoft文档中获取列表,然后收到仪表板或报告的列表。
此外,我尝试从GitHub下载Microsoft示例,但快速设置后,我遇到了类似的错误。我运行的项目是DotNetCorePaaS。
在Active Directory中,为Power BI服务启用了API权限。
获取仪表板和报告的正确方法是什么?
更新
我在PowerBI的管理门户中检查了这些值。
此外,我正在阅读Microsoft documentation,上的这篇文章,但是没有“工作区访问”选项。下图来自Microsoft文档:
这是我的(我不是管理员)
第二次更新
管理员将应用程序添加到PowerBI中以具有服务主体。当我尝试从Web应用程序中读取组或工作区列表时,仍然会收到错误消息。
然后我尝试运行DotNetCorePaaS
,结果却遇到了同样的情况。另外,我尝试读取组列表,结果是没有组。
string groupEndPoint = $"https://api.powerbi.com/v1.0/myorg/groups";
HttpResponseMessage groupApiResponse = embedTokenClient.GetAsync(groupEndPoint).Result;
if (groupApiResponse.StatusCode == HttpStatusCode.OK)
{
string groupContent = groupApiResponse.Content.ReadAsStringAsync().Result;
JObject groupResponse = JsonConvert.DeserializeObject(groupContent) as JObject;
}
如果我从Microsoft文档中运行相同的查询,则会得到结果。
应用程序正在调用的URL
并且如果我通过PowerBI检查此URL是否相似或至少WorkspaceId
和ReportId
相同
然后,我尝试直接使用以下代码访问报告:
var rsp = await client.Reports.GetReportAsync(
new Guid("ddfb8877-932e-48d0-9f69-f96e5236504b"));
在这种情况下,我收到Forbidden
错误。
我检查的最后一件事是PowerBI生成的报告链接。除了参数cid
之外,groupId和reportId也是我期望的。
PS:我刚刚在“为Power BI注册您的应用程序”末尾注意到了此文本:
注意:此处注册的应用程序不能用作服务主体。了解如何注册服务负责人
但是在另一个Microsoft文档中,我可以看到以下重要消息:
如果启用服务主体与Power BI一起使用,则Azure Active Directory权限不再生效。权限通过Power BI管理门户进行管理。
此过程在Active Directory中创建了一个新应用程序。我正在使用此应用程序设置服务主体。我可以这样做还是必须创建一个新应用?
最新解决方案
在PowerBI中,我创建了一个新的工作区。有了这个,我可以设置Workspace access
:在这里我可以从Active Directory中找到我的应用程序!代码正在工作!
解决方法
问题出在工作空间的允许下。我创建了一个新代码,现在代码可以正常使用了。
在帖子中,我添加了要遵循的解决方法。