2015-12-22 131 views
0

我的应用程序(ASP.NET MVC)使用Office 365身份验证,它工作正常。但现在我想在我的应用程序中显示一些强大的BI报告。但是,如果我使用office 365访问令牌访问Power BI Web API,它将失败。有人可以给我这个工作代码?Power BI中的Office 365身份验证

o生成令牌我使用下面的代码。

private static string getAccessToken() 
    { 
     var authority = "https://login.windows.net/<tenantId>"; 
     var authContext = new AuthenticationContext(authority); 
     var clientCredential = new ClientCredential("clientId", "client Secret"); 
     var result = authContext.AcquireToken("https://analysis.windows.net/powerbi/api", clientCredential); 

     return result.AccessToken; 
    } 

这将返回访问令牌。现在我将使用此访问令牌从电源BI中检索报告详细信息。

protected void getReportsButton_Click(object sender, EventArgs e) 
    { 
     var token = getAccessToken(); 
     string responseContent = string.Empty; 

     //Configure datasets request 
     System.Net.WebRequest request = System.Net.WebRequest.Create(String.Format("{0}reports", baseUri)) as System.Net.HttpWebRequest; 
     request.Method = "GET"; 
     request.ContentLength = 0; 
     request.Headers.Add("Authorization", String.Format("Bearer {0}", token)); 

     //Get datasets response from request.GetResponse() 
     using (var response = request.GetResponse() as System.Net.HttpWebResponse) 
     { 
      //Get reader from response stream 
      using (var reader = new System.IO.StreamReader(response.GetResponseStream())) 
      { 
       responseContent = reader.ReadToEnd(); 

       //Deserialize JSON string 
       PBIReports PBIReports = JsonConvert.DeserializeObject<PBIReports>(responseContent); 

       tb_reportsResult.Text = string.Empty; 
       //Get each Dataset from 
       foreach (PBIReport rpt in PBIReports.value) 
       { 
        tb_reportsResult.Text += String.Format("{0}\t{1}\t{2}\n", rpt.id, rpt.name, rpt.embedUrl); 
       } 
      } 
     } 
    } 

但是这种方法给我一个错误(远程服务器返回错误:(403)禁止)。

谢谢, Erandika。

回答

0

如果可以帮助,这是我用来连接到Power BI的代码。此示例还在我的Power BI订阅中查找数据集。

 private void Sign_Click(object sender, EventArgs e) 
    { 

     try 
     { 
      string resourceUri = "https://analysis.windows.net/powerbi/api"; 
      string clientID = "123456-xxxx-xxxx-xxxx-xxxxxxxxxxxx"; 
      string redirectUri = "https://login.live.com/oauth20_desktop.srf"; 
      string authorityUri = "https://login.windows.net/common/oauth2/authorize"; 
      AuthenticationContext authContext = new AuthenticationContext(authorityUri); 
      string token = authContext.AcquireToken(resourceUri, clientID, new Uri(redirectUri),PromptBehavior.RefreshSession).AccessToken; 
      _MyToken = token; 
      if (string.IsNullOrEmpty (_MyToken)) 
      { 
       txtToken.Text = "Problème de connexion !"; 
      } 
      else 
      { 
       txtToken.Text = "Connecté !"; 
       txtResultat.Clear(); 
       HttpWebRequest request = System.Net.WebRequest.Create(txtURI.Text) as System.Net.HttpWebRequest; 
       request.KeepAlive = true; 
       request.Method = "GET"; 
       request.ContentLength = 0; 
       request.ContentType = "application/json"; 
       request.Headers.Add("Authorization", String.Format("Bearer {0}", _MyToken)); 

       using (HttpWebResponse httpResponse = request.GetResponse() as System.Net.HttpWebResponse) 
       { 
        //Rajoutez la référence System.Web.Extensions 
        using (StreamReader reader = new System.IO.StreamReader(httpResponse.GetResponseStream())) 
        { 
         string responseContent = reader.ReadToEnd(); 
         JavaScriptSerializer jsonSerializer = new JavaScriptSerializer(); 
         Datasets datasets = (Datasets)jsonSerializer.Deserialize(responseContent, typeof(Datasets));      


         for (int i = 0; i < datasets.value.Count(); i++) 
         { 
          txtResultat.Text += "{" + i + "} " + datasets.value[i].Name + "\r\n"; 
          comboDataSets.Items.Insert (i, datasets.value[i].Name); 
          MyDataSet.Add(new dataset(datasets.value[i].Id, datasets.value[i].Name));       
         } 
        } 
       } 

      } 

     } 
     catch (Exception MyEx) 
     { 
      MessageBox.Show(MyEx.Message); 
     } 

    } 
相关问题