Powerbi 电源BI嵌入错误403来自服务器的禁止错误
我正在遵循PowerBI社区中提到的步骤,并在Postman中进行测试,已经完成了前4个步骤。但是,在Microsoft Power BI Embedded Playway中测试嵌入代码时,我不断遇到以下错误: Json对象 { “消息”:“LoadReportFailed”, “detailedMessage”:“初始化失败-无法解析群集”, “错误代码”:“403”, “级别”:6, “技术细节”:{ “请求ID”:“57679585-022b-4871-ae6d-bb722d4a07cc” } } 另外,在尝试第5步中提供的HTML设置时,我再次遇到403错误:“GET 403(禁止)”Powerbi 电源BI嵌入错误403来自服务器的禁止错误,powerbi,powerbi-embedded,Powerbi,Powerbi Embedded,我正在遵循PowerBI社区中提到的步骤,并在Postman中进行测试,已经完成了前4个步骤。但是,在Microsoft Power BI Embedded Playway中测试嵌入代码时,我不断遇到以下错误: Json对象 { “消息”:“LoadReportFailed”, “detailedMessage”:“初始化失败-无法解析群集”, “错误代码”:“403”, “级别”:6, “技术细节”:{ “请求ID”:“57679585-022b-4871-ae6d-bb722d4a07cc”
请帮忙。一个多星期以来,我一直在努力使这件事起作用 请确保您在授权标头中发送了正确的令牌。确保使用“承载人”作为授权标头
此外,请确保您的用户拥有所有必需的权限。请确保您在授权标头中发送了正确的令牌。确保使用“承载人”作为授权标头
另外,请确保您的用户拥有所有必需的权限。事实证明,尽管我有工作区ID、客户端ID和报表ID,而且我对API进行了正确的调用,但第五步中的错误是因为我是报表所在工作区的成员
要使API正常工作,您需要成为工作区的管理员,您正试图从中获取报告。事实证明,尽管我有工作区ID、客户端ID、报告ID,并且我对API进行了正确的调用,但第五步中的错误是因为我是报告所在工作区的成员
要使API正常工作,您需要成为工作区的管理员,您要从工作区中获取报告我最后使用以下步骤解决了这个问题 要在前端嵌入power BI报告(angular/JS),您必须生成2个不同的令牌(仅适用于应用程序场景)
PBIClientId:“xxxxxx-xxxx-xxxx-xxxx-XXXXXXXX”,
“PBIClientCret”:“,
“PBIApiUrl”:https://api.powerbi.com/",
“资源URL”:https://analysis.windows.net/powerbi/api",
“AuthorityUrl”:https://login.windows.net/common/",
“租户”:“,
专用异步任务生成器PowerBiAccessToken()
{
var tenantspecificcurl=authorityUrl.Replace(“common”,tenantId);
var authenticationContext=新的authenticationContext(tenantSpecificURL);
//使用应用程序凭据进行身份验证
var-credential=新的ClientCredential(clientId,clientSecret);
AuthenticationResult AuthenticationResult=等待authenticationContext.AcquireTokenAsync(资源URL,凭证);
返回authenticationResult.AccessToken;
}
步骤2:获取Power BI报告嵌入URL
传递在步骤1中生成的访问令牌,从power BI门户url获取的groupId和reportId
private async Task<EmbedModel> GetEmbedReportModel(string groupId, string reportId, string accessToken)
{
string restUrl = "https://api.powerbi.com/v1.0/myorg/groups/" + groupId+"/reports";
// add JSON to HttpContent object and configure content type
var method = new HttpMethod("GET");
var request = new HttpRequestMessage(method, restUrl);
using (HttpClient client = new HttpClient())
{
client.DefaultRequestHeaders.Add("Accept", "application/json");
client.DefaultRequestHeaders.Add("Authorization", "Bearer " + accessToken);
// send POST request to Power BI service
var jsonResult = await client.SendAsync(request).Result.Content.ReadAsStringAsync();
var reportObject = JsonConvert.DeserializeObject<ReportObjects>(jsonResult);
var report = reportObject.value.Where(r => r.id == reportId).FirstOrDefault();
return new EmbedModel { Id = report.id, EmbedUrl = report.embedUrl, Name = report.name };
}
}
the response you will get here is
{
"value": [
{
"datasetId": "xxxxxx-abcasdasd-dasda-4weas",
"id": "3asder78-asds-4d73-1232-5345dfsdfs",
"name": "SalesMarketing",
"webUrl": "https://app.powerbi.com/groups/xxx-xxxxx-xxx-xxxxxx-xxxxx/reports/xxxxxx-xxxx-xxx-xxxx-xxxxxxxx",
"embedUrl": "https://app.powerbi.com/reportEmbed?reportId=xxxxxx-xxxx-xxxx-xxxx-xxxxxx&groupId=aadasda21-xxcx-xx-xx-xxxxxx"
}
]
}
private异步任务GetEmbedReportModel(string groupId、string reportId、string accessToken)
{
字符串restUrl=”https://api.powerbi.com/v1.0/myorg/groups/“+groupId+”/reports”;
//将JSON添加到HttpContent对象并配置内容类型
var方法=新的HttpMethod(“GET”);
var请求=新的HttpRequestMessage(方法,restUrl);
使用(HttpClient=new HttpClient())
{
client.DefaultRequestHeaders.Add(“Accept”、“application/json”);
client.DefaultRequestHeaders.Add(“授权”、“承载人”+accessToken);
//向Power BI服务发送POST请求
var jsonResult=await client.sendaync(request.Result.Content.ReadAsStringAsync();
var reportObject=JsonConvert.DeserializeObject(jsonResult);
var report=reportObject.value.Where(r=>r.id==reportId.FirstOrDefault();
返回新的EmbedModel{Id=report.Id,EmbedUrl=report.EmbedUrl,Name=report.Name};
}
}
你在这里得到的回应是
{
“价值”:[
{
“数据集”:“xxxxxx-abcasdasd-dasda-4weas”,
“id”:“3asder78-asds-4d73-1232-5345dfsdfs”,
“名称”:“SalesMarketing”,
“webUrl”:https://app.powerbi.com/groups/xxx-xxxxx-xxx-xxxxxx-xxxxx/reports/xxxxxx-xxxx-xxx-xxxx-xxxxxxxx",
“嵌入URL”:https://app.powerbi.com/reportEmbed?reportId=xxxxxx-xxxx-xxxx-xxxx-xxxxxx&groupId=aadasda21-xxcx-xx-xx-xxxxxx“
}
]
}
步骤3:调用生成嵌入令牌API
private async Task<EmbedToken> GenerateEmbedToken(string groupId, string reportId,string accessToken)
{
string apiURL = "https://api.powerbi.com/v1.0/myorg/groups/"+ groupId + "/reports/"+ reportId +"/GenerateToken";
string requestBody = @"{ ""accessLevel"": ""View""}";
HttpContent postRequestBody = new StringContent(requestBody);
postRequestBody.Headers.ContentType = new MediaTypeWithQualityHeaderValue("application/json");
// prepare PATCH request
var method = new HttpMethod("POST");
var request = new HttpRequestMessage(method, apiURL);
request.Content = postRequestBody;
using (HttpClient client = new HttpClient())
{
client.DefaultRequestHeaders.Add("Accept", "application/json");
client.DefaultRequestHeaders.Add("Authorization", "Bearer " + accessToken);
// send POST request to Power BI service
var jsonResult = await client.SendAsync(request).Result.Content.ReadAsStringAsync();
EmbedToken embedToken = JsonConvert.DeserializeObject<EmbedToken>(jsonResult);
return embedToken;
}
}
private async Task GenerateEmbedToken(string groupId、string reportId、string accessToken)
{
字符串apiURL=”https://api.powerbi.com/v1.0/myorg/groups/“+groupId+”/reports/“+reportId+”/GenerateToken”;
字符串requestBody=@“{”“accessLevel”“:”“View”“}”;
HttpContent postRequestBody=新的StringContent(requestBody);
postRequestBody.Headers.ContentType=新的MediaTypeWithQualityHeaderValue(“应用程序/json”);
//准备修补程序请求
var方法=新的HttpMethod(“POST”);
var请求=新的HttpRequestMessage(方法,apiURL);
request.Content=postRequestBody;
使用(HttpClient=new HttpClient())
{
client.DefaultRequestHeaders.Add(“Accept”、“application/json”);
client.DefaultRequestHeaders.Add(“授权”、“承载人”+accessToken);
//向Power BI服务发送POST请求
var jsonResult=await client.sendaync(request.Result.Content.ReadAsStringAsync();
EmbeddeToken EmbeddeToken=JsonConvert.DeserializeObject(jsonResult);
返回令牌;
}
}
步骤4:使用嵌入令牌a
private async Task<EmbedToken> GenerateEmbedToken(string groupId, string reportId,string accessToken)
{
string apiURL = "https://api.powerbi.com/v1.0/myorg/groups/"+ groupId + "/reports/"+ reportId +"/GenerateToken";
string requestBody = @"{ ""accessLevel"": ""View""}";
HttpContent postRequestBody = new StringContent(requestBody);
postRequestBody.Headers.ContentType = new MediaTypeWithQualityHeaderValue("application/json");
// prepare PATCH request
var method = new HttpMethod("POST");
var request = new HttpRequestMessage(method, apiURL);
request.Content = postRequestBody;
using (HttpClient client = new HttpClient())
{
client.DefaultRequestHeaders.Add("Accept", "application/json");
client.DefaultRequestHeaders.Add("Authorization", "Bearer " + accessToken);
// send POST request to Power BI service
var jsonResult = await client.SendAsync(request).Result.Content.ReadAsStringAsync();
EmbedToken embedToken = JsonConvert.DeserializeObject<EmbedToken>(jsonResult);
return embedToken;
}
}