【问题标题】:Power BI Embedded : Get Report details API responds with 400 Bad requestPower BI Embedded:获取报告详细信息 API 响应 400 错误请求
【发布时间】:2018-05-27 16:57:21
【问题描述】:

总结:我正在将 Power BI 报告嵌入到 ISV 应用程序中,当我尝试调用 api 端点以获取报告的嵌入详细信息时,它会以 400 Bad Request 响应。我直接调用 Power BI API 而不使用 SDK,因为微软还没有正式发布 PowerBI SDK for Java based application 。此外,为了调试,我使用了另一个 .net 应用程序,该应用程序使用 PowerBI SDK 对同一工作区进行相同的 API 调用,并且它可以正常工作。

所有其他 API 端点,如“列出所有工作区”、“获取工作区详细信息”、“列出工作区中的所有仪表板”,甚至“列出工作区中的所有报告”,都会按请求响应,但此处列出的 API 端点:

Power BI get report embedding details using 'workspace_id' and 'report_id'

以看似正确的凭据和请求响应 400 Bad request。

接口应用上下文:

  1. ISV 应用程序基于 Spring Boot 框架 (Java) 和 Angular 2 框架构建。
  2. 目前,我找不到用于基于 Java 的应用程序的官方 Microsoft Power BI SDK,因此我直接从 Power BI API reference doc 引用 API
  3. ISV 应用程序具有访问此处列出的 API 的所有必要权限: https://docs.microsoft.com/en-us/power-bi/developer/power-bi-permissions
  4. 应用程序能够为应用程序中使用的所有其他 api 端点生成令牌、发出经过身份验证的请求并从 power bi 获得响应。

问题与调试

调试:

  1. 这是 PowerBI .NET SDK 发出的请求,适用于获取报告 API:

GET https://api.powerbi.com/v1.0/myorg/groups/d864b33b-74dd-4683-9cfd-91c712039147/reports/d618f04d-0b9d-483b-8f9c-cb1210d14595HTTP/1.1

授权:Bearer auth-token

用户代理:FxVersion/4.7.2117.0 Windows_7_Enterprise/6.1.7601 Microsoft.PowerBI.Api.V2.PowerBIClient/2.0.2.17225

主机:api.powerbi.com

  1. 这是我的应用程序直接引用返回 400 的 API 端点发出的请求:

GET https://api.powerbi.com/v1.0/myorg/groups/d864b33b-74dd-4683-9cfd-91c712039147/reports/d618f04d-0b9d-483b-8f9c-cb1210d14595HTTP/1.1

缓存控制:无缓存

邮递员令牌:一些令牌

授权:Bearer auth-token

用户代理:PostmanRuntime/7.1.1

接受:/

主机:api.powerbi.com

【问题讨论】:

  • Microsoft 为 C# 和 Javascript 提供 API。也许您可以通过 Javascript 尝试相同的调用,看看会发生什么。突出的两件事:1)用户代理差异(不重要,但谁知道)和2)邮递员令牌:一些令牌。 PowerBI.Api 简单地包装了 Http 调用,您应该能够调试和捕获详细信息,然后尝试在 Postman 中构建相同的请求。如果没有任何帮助,您可以通过 Fidler 进行路由,以检查差异。
  • 感谢夏洛克的回复,我做了与您在回复中建议的完全相同的事情
  • 1.由于我从我的应用程序中获得了 400,我使用 fiddler 来检查差异并在 Postman 上构建 api 调用,我得到了相同的结果。问题中发布的标头信息是 PowerBI SDK 调用,其他分别是 Postman 构造的调用,两者都是从提琴手中嗅出的结果。此外,用户代理只不过是哪个应用程序首先发出请求是使用 powerBI SDK 的应用程序,第二个是应用程序是邮递员。
  • Postman-Token 是 Postman 添加到任何 api 调用的令牌,它使您可以在 postman settings 中禁用它。我确实尝试了两种方法,但没关系。
  • 在 Postman 中,你使用的是 Bearer Token Authorization 吗?

标签: java c# angularjs api powerbi-embedded


【解决方案1】:

这是由于Accept HTTP 标头造成的。 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 标头。 (默认 curl 发送Accept: * / *

【讨论】:

  • 这解决了问题,感谢您的帮助。奇怪的是,对于特定的 API 调用,您需要进行这种显式更改。
  • 谢谢,如何使用 axios 禁用“Accept”标头?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-27
  • 2019-05-11
  • 1970-01-01
相关资源
最近更新 更多