Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# &引用;“此内容不可用”;在应用程序数据场景中创建报告时_C#_Asp.net Core_Powerbi_Powerbi Embedded - Fatal编程技术网

C# &引用;“此内容不可用”;在应用程序数据场景中创建报告时

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响应 生成访问令牌

我正在使用ASP.NET Core 3.1 MVC应用程序,尝试使用“应用程序拥有数据”场景和服务主体在嵌入式视图中实现Power BI

我可以使用所述服务主体成功连接到Power BI服务。我能够无问题地检索令牌并将其传递到Power BI服务,在那里我可以检索报告列表并查看单个报告(使用
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响应

有人知道为什么会这样吗?服务员