【问题标题】:Integration with PowerBI: GetDashboardsInGroupAsync or GetReportsInGroupAsync returns NotFound与 PowerBI 集成:GetDashboardsInGroupAsync 或 GetReportsInGroupAsync 返回 NotFound
【发布时间】:2020-09-23 18:05:54
【问题描述】:

我正在尝试通过其 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
}

我从 URL 中获取 groupId

我得到的是一个错误

Microsoft.Rest.HttpOperationException:操作返回了无效的状态代码“NotFound”

然后,我认为这是一个配置错误。然后,我尝试从 Microsoft 文档中获取列表,并收到了仪表板或报告的列表。

另外,我尝试从GitHub 下载 Microsoft 示例,但在快速设置后,我遇到了类似的错误。我跑的项目是 DotNetCorePaaS。

在 Active Directory 中,为 Power BI 服务启用 API 权限。

获取仪表板和报告的正确方法是什么?

更新

我在 PowerBI 的管理门户中查看了这些值。

另外,我在Microsoft documentation, 上阅读了这篇文章,但我没有“工作区访问”选项。下图来自微软文档:

这是我的(我不是管理员)

第二次更新

管理员在 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 是

https://api.powerbi.com/v1.0/myorg/groups/04639c90-832b-4d25-8852-eb5d14313f8d/reports/ddfb8877-932e-48d0-9f69-f96e5236504b

如果我使用 PowerBI 检查此 URL 是否相似或至少 WorkspaceIdReportId 相同

https://app.powerbi.com/groups/04639c90-832b-4d25-8852-eb5d14313f8d/reports/ddfb8877-932e-48d0-9f69-f96e5236504b/ReportSection

然后,我尝试使用以下代码直接访问报告:

var rsp = await client.Reports.GetReportAsync(
                          new Guid("ddfb8877-932e-48d0-9f69-f96e5236504b"));

在这种情况下,我收到 Forbidden 错误。

我检查的最后一件事是 PowerBI 生成的报告链接。除了参数cid之外,groupId和reportId都是我所期望的。

https://app.powerbi.com/groups/04639c90-832b-4d25-8852-eb5d14313f8d/reports/ddfb8877-932e-48d0-9f69-f96e5236504b?ctid=0306b564-e855-4e8a-ad57-2cf9b2b3c830

PS:我刚刚在“Register your application for Power BI”的末尾注意到了这段文字:

注意:此处注册的应用程序不能用作服务主体。了解如何注册服务主体

但在另一个 Microsoft 文档中,我可以看到这条重要信息:

如果您启用服务主体以与 Power BI 一起使用,Azure Active Directory 权限将不再生效。权限通过 Power BI 管理门户进行管理。

此过程在 Active Directory 中创建了一个新应用程序。我正在使用此应用程序来设置服务主体。我可以这样做还是必须创建一个新应用?

解决方案的最后更新

在 PowerBI 中,我创建了一个新工作区。有了这个,我可以设置Workspace access:在这里我可以从 Active Directory 中找到我的应用程序!代码正在运行!

【问题讨论】:

  • 通常 HTTP 响应状态码是 200 OK。错误表示您遇到错误并且可能会收到 400/500 错误。错误有三种可能 1) 示例请求使用 https(安全),其中 TLS 用于身份验证。您可能使用了错误版本的 TLS 2) 请求错误 3) 您缺少标头。最好的调试方法是使用像wireshark 或fiddler 这样的嗅探器。如果您是工作应用程序,请比较工作和不工作。你可以使用邮递员。检查 TLS 的版本和第一个请求中的标头。
  • 你是否在power bi服务端给了app主体对工作区的权限?
  • 我更新了帖子以提供更多详细信息。我按照 Microsoft 文档的第 4 步操作,但找不到此选项。我不是管理员
  • 现在,管理员添加了应用主体权限,但我遇到了同样的错误。

标签: c# powerbi-embedded


【解决方案1】:

问题出在工作区的权限上。我创建了一个新的,现在代码无需任何更改即可运行。

在帖子中,我添加了我遵循的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-17
    • 1970-01-01
    • 2021-08-09
    • 2016-04-08
    • 2021-10-23
    • 2017-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多