C# &引用;“此内容不可用”;在应用程序数据场景中创建报告时
我正在使用ASP.NET Core 3.1 MVC应用程序,尝试使用“应用程序拥有数据”场景和服务主体在嵌入式视图中实现Power BI 我可以使用所述服务主体成功连接到Power BI服务。我能够无问题地检索令牌并将其传递到Power BI服务,在那里我可以检索报告列表并查看单个报告(使用C# &引用;“此内容不可用”;在应用程序数据场景中创建报告时,c#,asp.net-core,powerbi,powerbi-embedded,C#,Asp.net Core,Powerbi,Powerbi Embedded,我正在使用ASP.NET Core 3.1 MVC应用程序,尝试使用“应用程序拥有数据”场景和服务主体在嵌入式视图中实现Power BI 我可以使用所述服务主体成功连接到Power BI服务。我能够无问题地检索令牌并将其传递到Power BI服务,在那里我可以检索报告列表并查看单个报告(使用powerbi.embed())。但是,当我调用powerbi.createReport()JavaScript方法时,在Fiddler中查看时,它总是返回“此内容不可用”以及403响应 生成访问令牌
powerbi.embed()
)。但是,当我调用powerbi.createReport()
JavaScript方法时,在Fiddler中查看时,它总是返回“此内容不可用”以及403响应
生成访问令牌
private async Task<string> GetPowerBIAccessToken()
{
string pBiClientId = powerBISettings.ApplicationId.ToString();
string pBiSecret = powerBISettings.ApplicationSecret.ToString();
var clientCredentials = new ClientCredential(pBiClientId, pBiSecret);
var authContext = new AuthenticationContext($"{powerBISettings.AuthorityUrl}/{powerBISettings.TenantId}", new TokenCache());
var token = await authContext.AcquireTokenAsync(powerBISettings.ResourceUrl, clientCredentials);
return token.AccessToken;
}
private异步任务GetPowerBIAccessToken()
{
字符串pBiClientId=powerBISettings.ApplicationId.ToString();
字符串pBiSecret=powerBISettings.ApplicationSecret.ToString();
var clientCredentials=新的ClientCredential(pBiClientId,pBiSecret);
var authContext=newauthenticationContext($“{powerBISettings.AuthorityUrl}/{powerBISettings.TenantId}”,new-TokenCache());
var token=await authContext.AcquireTokenAsync(powerBISettings.ResourceUrl,clientCredentials);
返回token.AccessToken;
}
生成模型以查看Power BI报告的代码
public async Task<EmbedConfig> ViewReport(Guid ReportId)
{
var result = new EmbedConfig { };
var accessToken = await GetPowerBIAccessToken();
var tokenCredentials = new TokenCredentials(accessToken, "Bearer");
using (var client = new PowerBIClient(new Uri(powerBISettings.ApiUrl), tokenCredentials))
{
var workspaceId = powerBISettings.WorkspaceId.Value;
var reports = await client.Reports.GetReportsInGroupAsync(workspaceId);
var report = reports.Value.Where(a => a.Id == ReportId).FirstOrDefault();
var generateTokenRequestParameters = new GenerateTokenRequest(accessLevel: "view");
var tokenResponse = await client.Reports.GenerateTokenAsync(workspaceId, report.Id, generateTokenRequestParameters);
result.EmbedToken = tokenResponse;
result.EmbedUrl = report.EmbedUrl;
result.Id = report.Id == null ? string.Empty : report.Id.ToString();
}
return result;
}
public async Task<EmbedConfig> CreateNewReport()
{
var result = new EmbedConfig { };
var accessToken = await GetPowerBIAccessToken();
var tokenCredentials = new TokenCredentials(accessToken, "Bearer");
using (var client = new PowerBIClient(new Uri(powerBISettings.ApiUrl), tokenCredentials))
{
var workspaceId = powerBISettings.WorkspaceId.Value;
var generateTokenRequestParameters = new GenerateTokenRequest(TokenAccessLevel.Create, datasetId: "xyz", allowSaveAs: true);
var tokenResponse = await client.Reports.GenerateTokenForCreateInGroupAsync(workspaceId, generateTokenRequestParameters);
result.EmbedToken = tokenResponse;
result.DatasetId = "xyz";
}
return result;
}
公共异步任务ViewReport(Guid ReportId)
{
var result=new embeddeconfig{};
var accessToken=await GetPowerBIAccessToken();
var tokenCredentials=新的tokenCredentials(accessToken,“载体”);
使用(var client=new PowerBIClient(新Uri(powerBISettings.apirl),tokenCredentials))
{
var workspaceId=powerBISettings.workspaceId.Value;
var reports=await client.reports.GetReportsInGroupAsync(workspaceId);
var report=reports.Value.Where(a=>a.Id==ReportId.FirstOrDefault();
var generateTokenRequestParameters=新的GenerateTokenRequest(accessLevel:“视图”);
var tokenResponse=await client.Reports.GenerateTokenAsync(工作空间Id、report.Id、generateTokenRequestParameters);
result.embeddeToken=tokenResponse;
result.EmbedUrl=report.EmbedUrl;
result.Id=report.Id==null?string.Empty:report.Id.ToString();
}
返回结果;
}
MVC视图,带嵌入式报表,可查看上述报表-这很有效强>
<style>
#reportContainer {
height: 600px;
width: 100%;
max-width: 2000px;
}
</style>
<script src="https://npmcdn.com/es6-promise@3.2.1"></script>
<script src="~/js/powerbi.min.js"></script>
<div id="reportContainer"></div>
@section scripts {
<script>
// Read embed application token from Model
var accessToken = "@Model.EmbedToken.Token";
// Read embed URL from Model
var embedUrl = "@Html.Raw(Model.EmbedUrl)";
// Read report Id from Model
var embedReportId = "@Model.Id";
// Get models. models contains enums that can be used.
var models = window['powerbi-client'].models;
// Embed configuration used to describe the what and how to embed.
// This object is used when calling powerbi.embed.
// This also includes settings and options such as filters.
// You can find more information at https://github.com/Microsoft/PowerBI-JavaScript/wiki/Embed-Configuration-Details.
var config = {
type: 'report',
tokenType: models.TokenType.Embed,
accessToken: accessToken,
embedUrl: embedUrl,
id: embedReportId,
permissions: models.Permissions.All,
settings: {
filterPaneEnabled: true,
navContentPaneEnabled: true
}
};
$(document).ready(function () {
// Get a reference to the embedded report HTML element
var reportContainer = $('#reportContainer')[0];
// Embed the report and display it within the div container.
powerbi.embed(reportContainer, config);
});
</script>
}
#报表容器{
高度:600px;
宽度:100%;
最大宽度:2000px;
}
@节脚本{
//从模型中读取嵌入应用程序令牌
var accessToken=“@Model.embeddeToken.Token”;
//从模型中读取嵌入URL
var embedUrl=“@Html.Raw(Model.embedUrl)”;
//从模型读取报告Id
var embeddereportid=“@Model.Id”;
//获取模型。模型包含可以使用的枚举。
var模型=窗口['powerbi-client']。模型;
//嵌入配置用于描述嵌入的内容和方式。
//调用powerbi.embed时使用此对象。
//这还包括设置和选项,如过滤器。
//您可以在以下网址找到更多信息:https://github.com/Microsoft/PowerBI-JavaScript/wiki/Embed-Configuration-Details.
变量配置={
键入:“报告”,
令牌类型:models.tokenType.Embed,
accessToken:accessToken,
embedUrl:embedUrl,
id:embeddereportid,
权限:models.permissions.All,
设置:{
filterPaneEnabled:true,
navContentPaneEnabled:true
}
};
$(文档).ready(函数(){
//获取对嵌入报表HTML元素的引用
var reportContainer=$('#reportContainer')[0];
//嵌入报表并将其显示在div容器中。
嵌入(reportContainer,config);
});
}
生成模型以创建新空白报告的代码
public async Task<EmbedConfig> ViewReport(Guid ReportId)
{
var result = new EmbedConfig { };
var accessToken = await GetPowerBIAccessToken();
var tokenCredentials = new TokenCredentials(accessToken, "Bearer");
using (var client = new PowerBIClient(new Uri(powerBISettings.ApiUrl), tokenCredentials))
{
var workspaceId = powerBISettings.WorkspaceId.Value;
var reports = await client.Reports.GetReportsInGroupAsync(workspaceId);
var report = reports.Value.Where(a => a.Id == ReportId).FirstOrDefault();
var generateTokenRequestParameters = new GenerateTokenRequest(accessLevel: "view");
var tokenResponse = await client.Reports.GenerateTokenAsync(workspaceId, report.Id, generateTokenRequestParameters);
result.EmbedToken = tokenResponse;
result.EmbedUrl = report.EmbedUrl;
result.Id = report.Id == null ? string.Empty : report.Id.ToString();
}
return result;
}
public async Task<EmbedConfig> CreateNewReport()
{
var result = new EmbedConfig { };
var accessToken = await GetPowerBIAccessToken();
var tokenCredentials = new TokenCredentials(accessToken, "Bearer");
using (var client = new PowerBIClient(new Uri(powerBISettings.ApiUrl), tokenCredentials))
{
var workspaceId = powerBISettings.WorkspaceId.Value;
var generateTokenRequestParameters = new GenerateTokenRequest(TokenAccessLevel.Create, datasetId: "xyz", allowSaveAs: true);
var tokenResponse = await client.Reports.GenerateTokenForCreateInGroupAsync(workspaceId, generateTokenRequestParameters);
result.EmbedToken = tokenResponse;
result.DatasetId = "xyz";
}
return result;
}
public异步任务CreateNewReport()
{
var result=new embeddeconfig{};
var accessToken=await GetPowerBIAccessToken();
var tokenCredentials=新的tokenCredentials(accessToken,“载体”);
使用(var client=new PowerBIClient(新Uri(powerBISettings.apirl),tokenCredentials))
{
var workspaceId=powerBISettings.workspaceId.Value;
var generateTokenRequestParameters=new GenerateTokenRequest(TokenAccessLevel.Create,datasetId:“xyz”,allowSaveAs:true);
var tokenResponse=wait client.Reports.GenerateTokenForCreateInGroupAsync(工作空间ID,generateTokenRequestParameters);
result.embeddeToken=tokenResponse;
result.DatasetId=“xyz”;
}
返回结果;
}
MVC视图与嵌入式创建报告-不起作用
<style>
#reportContainer {
height: 600px;
width: 100%;
max-width: 2000px;
}
</style>
<script src="https://npmcdn.com/es6-promise@3.2.1"></script>
<script src="~/js/powerbi.min.js"></script>
<div id="reportContainer"></div>
@section scripts {
<script>
// Read embed application token from Model
var accessToken = '@Model.EmbedToken.Token';
// Get models. models contains enums that can be used.
var models = window['powerbi-client'].models;
// Embed configuration used to describe the what and how to embed.
// This object is used when calling powerbi.embed.
// This also includes settings and options such as filters.
// You can find more information at https://github.com/Microsoft/PowerBI-JavaScript/wiki/Embed-Configuration-Details.
var config = {
accessToken: accessToken,
datasetId: '@Model.DatasetId',
embedUrl: 'https://embedded.powerbi.com/ReportEmbed'
};
$(document).ready(function () {
// Get a reference to the embedded report HTML element
var reportContainer = $('#reportContainer')[0];
// Embed the report and display it within the div container.
powerbi.createReport(reportContainer, config);
});
</script>
}
#报表容器{
高度:600px;
宽度:100%;
最大宽度:2000px;
}
@节脚本{
//从模型中读取嵌入应用程序令牌
var accessToken='@Model.embeddeToken.Token';
//获取模型。模型包含可以使用的枚举。
var模型=窗口['powerbi-client']。模型;
//嵌入配置用于描述嵌入的内容和方式。
//调用powerbi.embed时使用此对象。
//这还包括设置和选项,如过滤器。
//您可以在以下网址找到更多信息:https://github.com/Microsoft/PowerBI-JavaScript/wiki/Embed-Configuration-Details.
变量配置={
accessToken:accessToken,
datasetId:“@Model.datasetId”,
嵌入URL:'https://embedded.powerbi.com/ReportEmbed'
};
$(文档).ready(函数(){
//获取对嵌入报表HTML元素的引用
var reportContainer=$('#reportContainer')[0];
//嵌入报表并将其显示在div容器中。
createReport(reportContainer,config);
});
}
加载上述视图时,它将返回此值
Fiddler捕获403响应
有人知道为什么会这样吗?服务员