Power BI Embedded: получение сведений об отчете API отвечает с ошибочным запросом 400

Сводка: я работаю над встраиванием отчетов Power BI в приложение независимого поставщика программного обеспечения, и когда я пытаюсь вызвать конечную точку api, чтобы получить сведения о встраивании отчета, она отвечает 400 неверным запросом. Я напрямую вызываю API Power BI без использования SDK, поскольку Microsoft официально не выпустила PowerBI SDK для приложений на основе Java. Кроме того, для отладки я использовал другое приложение .net, которое использует PowerBI SDK для выполнения того же вызова API в той же рабочей области, и оно работает без проблем.

Все другие конечные точки API, такие как «перечислить все рабочие области», «получить сведения о рабочей области», «перечислить все информационные панели» в рабочей области »и даже« перечислить все отчеты в рабочей области », отвечают по запросу без проблем, но конечная точка API указана здесь:

Power BI получить сведения о внедрении отчета с помощью 'workspace_id' и 'report_id'

отвечает 400 ошибочным запросом с, казалось бы, правильными учетными данными и запросом.

Контекст взаимодействия приложения:

  1. Приложение ISV построено на платформе загрузки Spring (Java) и платформе Angular 2.
  2. В настоящее время мне не удалось найти официальный Microsoft Power BI SDK для приложения на основе Java, из-за чего я напрямую ссылаюсь на API из Справочная документация по Power BI API
  3. Приложение ISV имеет все необходимые разрешения для доступа к перечисленным здесь API: https://docs.microsoft.com/en-us/power-bi/developer/power-bi-permissions
  4. Приложение может генерировать токен, выполнять аутентифицированный запрос и получать ответ от power bi для всех других конечных точек api, которые используются в приложении.

Проблема и отладка

Отладка:

  1. Это запрос, который делает PowerBI .NET SDK и который работает против API получения отчетов:

ПОЛУЧИТЬ https://api.powerbi.com/v1.0/myorg/groups/d864b33b-74dd-4683-9cfd-91c712039147/reports/d618f04d-0b9d-483b-8f9c-cb1210d14595 HTTP / 1.1

Авторизация: токен авторизации на предъявителя

Пользовательский агент: FxVersion / 4.7.2117.0 Windows_7_Enterprise / 6.1.7601 Microsoft.PowerBI.Api.V2.PowerBIClient / 2.0.2.17225

Хост: api.powerbi.com

  1. Это запрос, который мое приложение делает, напрямую ссылаясь на конечную точку API, которая возвращает 400:

ПОЛУЧИТЬ https://api.powerbi.com/v1.0/myorg/groups/d864b33b-74dd-4683-9cfd-91c712039147/reports/d618f04d-0b9d-483b-8f9c-cb1210d14595 HTTP / 1.1

кеш-контроль: без кеша

Почтальон-токен: какой-то токен

Авторизация: токен авторизации на предъявителя

Пользовательский агент: PostmanRuntime / 7.1.1

Принять: /

Хост: api.powerbi.com


person Amit Bhandari    schedule 13.12.2017    source источник
comment
Microsoft предоставляет API для C # и Javascript. Возможно, вы могли бы попробовать те же вызовы через Javascript и посмотреть, что произойдет. Выделяются две вещи: 1) различия между пользовательскими агентами (не важно, но кто знает) и 2) Postman-Token: some-token. PowerBI.Api просто обертывает Http-вызовы, вы должны иметь возможность отлаживать и фиксировать детали, а затем пытаться создать тот же запрос в Postman. Если ничего не помогает, вы можете выполнить маршрутизацию через Fidler, чтобы проверить различия.   -  person Sherlock    schedule 15.12.2017
comment
Спасибо за ответ, шерлок, я сделал то же самое, что ты предлагал в своем ответе   -  person Amit Bhandari    schedule 18.12.2017
comment
1. Так как я получал 400 из моего приложения, я использовал скрипач, чтобы проверить различия и построить вызов api в Postman, где я получил тот же результат. Информация заголовка, размещенная в вопросе, представляет собой вызов PowerBI SDK, а другой - вызов, созданный Postman, соответственно, оба являются результатами сниффинга из скрипта. Кроме того, агент пользователя - это не что иное, как приложение, которое делает запрос первым, - это приложение, использующее powerBI SDK, а второе Почтальон.   -  person Amit Bhandari    schedule 18.12.2017
comment
Postman-Token - это токен, который Postman добавляет к любому вызову api, который заставляет вас отключить его в настройках почтальона. Я пробовал оба способа, и это не имело значения.   -  person Amit Bhandari    schedule 18.12.2017
comment
В Postman вы используете авторизацию токена на предъявителя?   -  person Sherlock    schedule 18.12.2017
comment
Да, я использую токен, созданный в приложении   -  person Amit Bhandari    schedule 18.12.2017
comment
Верно, но убедитесь, что вы используете жетон на предъявителя в раскрывающемся списке. Кроме того, вы, вероятно, знаете, но не забудьте получить токены заново, так как они истекают через час или около того.   -  person Sherlock    schedule 18.12.2017


Ответы (1)


Это связано с HTTP-заголовком Accept. Метод REST от Microsoft его не поддерживает. Пытаться:

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: * / *)

person Ivan Zbykovskyi    schedule 15.01.2018
comment
Это устранило проблему, спасибо за помощь. Странно, что для конкретного вызова API вам нужно было бы внести это явное изменение. - person Amit Bhandari; 19.01.2018
comment
Спасибо, как я могу отключить заголовок 'Accept' с помощью axios? - person infodev; 06.10.2020