C# 在Xamarin.Forms应用程序中嵌入PowerBI报告
你好。我在Xamarin.Forms应用程序中显示PowerBi报告时遇到问题(这里是PBI的新手)。我只需要查看报告,不需要编辑内容。我得到了访问令牌,之后我做了一个GET请求,并从PowerBi获得了嵌入的url,我在WebView.Source中使用了该url来显示在屏幕上。它加载到那个报告,但它说我并没有权限查看我应该拥有的报告(我用于令牌的用户是PBI PRO用户)。我得到的文本是“要查看此报告,请作者访问”。这是邮政编码C# 在Xamarin.Forms应用程序中嵌入PowerBI报告,c#,xamarin,xamarin.forms,powerbi,access-token,C#,Xamarin,Xamarin.forms,Powerbi,Access Token,你好。我在Xamarin.Forms应用程序中显示PowerBi报告时遇到问题(这里是PBI的新手)。我只需要查看报告,不需要编辑内容。我得到了访问令牌,之后我做了一个GET请求,并从PowerBi获得了嵌入的url,我在WebView.Source中使用了该url来显示在屏幕上。它加载到那个报告,但它说我并没有权限查看我应该拥有的报告(我用于令牌的用户是PBI PRO用户)。我得到的文本是“要查看此报告,请作者访问”。这是邮政编码 string url = "https://logi
string url = "https://login.microsoftonline.com/<pbi_tenant_id>/oauth2/token";
IEnumerable<KeyValuePair<string, string>> parameters = new List<KeyValuePair<string, string>>()
{
new KeyValuePair<string, string>("name", "testName"),
new KeyValuePair<string, string>("grant_type", "password"),
new KeyValuePair<string, string>("scope", "openid"),
new KeyValuePair<string, string>("resource", "https://analysis.windows.net/powerbi/api"),
new KeyValuePair<string, string>("client_id", "<client_id>"),
new KeyValuePair<string, string>("username", "<pro_user>"),
new KeyValuePair<string, string>("password", "<password>"),
new KeyValuePair<string, string>("client_secret", "<client_secret>")
};
HttpContent content = new FormUrlEncodedContent(parameters);
stringurl=”https://login.microsoftonline.com//oauth2/token";
IEnumerable参数=新列表()
{
新的KeyValuePair(“名称”、“测试名称”),
新的KeyValuePair(“授权类型”、“密码”),
新的KeyValuePair(“范围”、“openid”),
新的KeyValuePair(“资源”https://analysis.windows.net/powerbi/api"),
新的KeyValuePair(“客户机id”,”),
新的KeyValuePair(“用户名”和“”),
新的KeyValuePair(“密码”和“”),
新的KeyValuePair(“客户机密钥”),“”)
};
HttpContent=新FormUrlEncodedContent(参数);
在所有这些之后,我得到了我的令牌,并用该令牌发出了GET请求以获取嵌入的url
using (HttpResponseMessage response = await client.PostAsync(url, content))
{
if (response.IsSuccessStatusCode)
{
using (HttpContent contentOfReponse = response.Content)
{
try
{
string tokenResponseJSON = await contentOfReponse.ReadAsStringAsync(); //token in json format that I needed to convert to string in next line
var tokenRepsonse = JsonConvert.DeserializeObject<TokenInfoModel>(tokenResponseJSON);
string accessToken = tokenRepsonse.access_token; //my string token
try
{
string pbiUrl = "https://api.powerbi.com/v1.0/myorg/reports/<company_report_id>";
client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", accessToken); //Authorization of request
var response2 = await client.GetStringAsync(pbiUrl);
var rese = JsonConvert.DeserializeObject<PBIRepost>(response2);
PbiEmbedUrl = rese.embedUrl + "&autoAuth=true" + "&isOwnedByMe=" + rese.isOwnedByMe + "apps/<app_id>";
RaisePropertyChanged(PbiEmbedUrl);
}
catch (Exception ex)
{
//await App.Current.MainPage.DisplayAlert();
}
}
catch (Exception)
{
//await App.Current.MainPage.DisplayAlert();
}
}
}
else
{
//await App.Current.MainPage.DisplayAlert();
}
}
使用(HttpResponseMessage response=wait client.PostAsync(url,内容))
{
if(响应。IsSuccessStatusCode)
{
使用(HttpContent-ContentOfResponse=response.Content)
{
尝试
{
string tokenResponseJSON=await contentOfResponse.ReadAsStringAsync();//json格式的令牌,我需要将其转换为下一行中的字符串
var tokenRepsonse=JsonConvert.DeserializeObject(tokenResponseJSON);
string accessToken=tokenRepsonse.access\u token;//我的字符串令牌
尝试
{
字符串pbiUrl=”https://api.powerbi.com/v1.0/myorg/reports/";
client.DefaultRequestHeaders.Authorization=new System.Net.Http.Headers.authorizationHeaderValue(“Bearer”,accessToken);//请求的授权
var response2=await client.GetStringAsync(pbiUrl);
var rese=JsonConvert.DeserializeObject(response2);
PbiEmbedUrl=rese.embedUrl+“&autoAuth=true”+“&isOwnedByMe=“+rese.isOwnedByMe+”apps/&config=vst1bfluitufjeyjjbhvzdgvy5ldcisimvkrmlzfrlbgvtzwrpcmvjdbc5hbmfsexpcy53aw5kb3dzlm5ldcisimvkrvhdyzxmionsibyzdzvzjvzjvyzjvjjvjvjvjjvjvjjvjvjjjjvjvjjjvjjvjjjjjjvjvjjjjjjjj(不是真正的配置字符串,我不确定是否可以共享真正的配置字符串,所以我弥补了这个问题)
我没有弄乱嵌入url中的配置,所以这可能也是问题所在,但我不知道如何编辑配置。您不能在web浏览器中简单地导航到嵌入url。这是您要传递给的内容。您必须在浏览器中加载网页,然后让客户端在该浏览器中的
元素中加载报告s页面。请参阅以了解详细信息。@AndreyNikolov嗨,谢谢你的回答。我有点困惑,因为你链接的这个Power BI客户端是用于JavaScript的,而不是Xamarin。我到处搜索类似Xamarin的内容,但没有找到任何内容。我想我在某个地方读到可以在WebView中导入JS文件的内容,所以我会尝试一下。如果你知道关于PBI嵌入Xamarin的纽约文档我将非常感谢您。嵌入Power BI的所有可能方法都可以归结为在浏览器中显示的网页中的iFrame。无论您的应用程序是web应用程序、桌面应用程序还是移动应用程序,都是在浏览器中显示的内容。请再次阅读链接的问题和两个答案。它们是详细说明所有内容(也请阅读给定的链接以嵌入WPF应用程序)。