摘要:我正在将 Power BI 报告嵌入到 ISV 应用程序中,当我尝试调用 api 端点以获取报告的嵌入详细信息时,它会响应 400 Bad Request 。我直接调用 Power BI API,而不使用 SDK,因为微软尚未正式发布适用于基于 Java 的应用程序的 PowerBI SDK。另外,为了调试,我使用了另一个 .net 应用程序,该应用程序使用 PowerBI SDK 对同一工作区进行相同的 API 调用,并且它可以正常工作。
所有其他 API 端点(例如“列出所有工作区”、“获取工作区详细信息”、“列出工作区中的所有仪表板”,甚至“列出工作区中的所有报告”)都会按请求响应,不会出现任何问题,但此处列出的 API 端点:
Power BI get report embedding details using 'workspace_id' and 'report_id'
使用看似正确的凭据和请求响应 400 Bad request。
连接应用程序上下文:
- ISV 应用程序基于 Spring boot 框架(Java)和 Angular 2 框架构建。
- 目前,我找不到适用于基于 Java 的应用程序的官方 Microsoft Power BI SDK,因此我直接引用 Power BI API reference doc 中的 API。
- ISV 应用程序拥有访问此处列出的 API 的所有必要权限: https://learn.microsoft.com/en-us/power-bi/developer/power-bi-permissions
- 应用程序能够为应用程序中使用的所有其他 API 端点生成 token 、发出经过身份验证的请求并从 power bi 获取响应。
问题和调试
调试:
- 这是 PowerBI .NET SDK 发出的请求,适用于获取报告 API:
授权:不记名身份验证 token
用户代理:FxVersion/4.7.2117.0 Windows_7_Enterprise/6.1.7601 Microsoft.PowerBI.Api.V2.PowerBIClient/2.0.2.17225
主机:api.powerbi.com
- 这是我的应用程序直接引用 API 端点的请求,该请求返回 400:
缓存控制:无缓存
postman token :一些 token
授权:不记名身份验证 token
用户代理:PostmanRuntime/7.1.1
接受:/
主机:api.powerbi.com
最佳答案
这是由于 Accept
HTTP header 造成的。 Microsoft 的 REST 方法不支持它。
尝试:
curl -XGET
"https://api.powerbi.com/v1.0/myorg/groups/{groupId}/reports/{reportId}" -i -H
"Authorization: Bearer {token}" -H "Accept:"
-H "Accept:"
将禁用此 HTTP header 。 (默认情况下curl发送接受:*/*
)
关于java - Power BI 嵌入式 : Get Report details API responds with 400 Bad request,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47799183/