【发布时间】: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 是
如果我使用 PowerBI 检查此 URL 是否相似或至少 WorkspaceId 和 ReportId 相同
然后,我尝试使用以下代码直接访问报告:
var rsp = await client.Reports.GetReportAsync(
new Guid("ddfb8877-932e-48d0-9f69-f96e5236504b"));
在这种情况下,我收到 Forbidden 错误。
我检查的最后一件事是 PowerBI 生成的报告链接。除了参数cid之外,groupId和reportId都是我所期望的。
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