Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Earn a 50% discount on the DP-600 certification exam by completing the Fabric 30 Days to Learn It challenge.

Reply
tsozgen
New Member

The remote server returned an error: (404) not found error in powerBI

Hi There;
I try to impement the power bi solution located there; https://powerbi.microsoft.com/en-us/documentation/powerbi-developer-walkthrough-push-data-register-a... My data resides at the power BI database (or cloud I am not sure about the location). Dataset is created successfully, however, there is a problem in addRowsToDataset function. What am I missing? Thanks in advance.

 

class Program
{
    private static string token = string.Empty;

    static void Main(string[] args)
    {
        string datasetId = string.Empty;

        try
        {
            token = getAuthenticationToken();

            datasetId = getDatasetId();

            createDataset();

            addRowsToDataset(datasetId, "CorporationProduct");

            Console.ReadKey();
        }
        catch (Exception ex)
        {
            Console.WriteLine("An error occured in main function. ");
            Console.WriteLine(ex.Message);
        }

    }

    private static string getAuthenticationToken()
    {
        string token = null;


        // TODO: Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory -Version 2.21.301221612
        // and add using Microsoft.IdentityModel.Clients.ActiveDirectory
        try
        {

            //The client id that Azure AD created when you registered your client app.
            string clientID = "myclientid";

            //RedirectUri you used when you register your app.
            //For a client app, a redirect uri gives Azure AD more details on the application that it will authenticate.
            // You can use this redirect uri for your client app
            string redirectUri = "https://login.live.com/oauth20_desktop.srf";

            //Resource Uri for Power BI API
            string resourceUri = "https://analysis.windows.net/powerbi/api";

            //OAuth2 authority Uri
            string authorityUri = "https://login.windows.net/common/oauth2/authorize";

            //Get access token:
            // To call a Power BI REST operation, create an instance of AuthenticationContext and call AcquireToken
            // AuthenticationContext is part of the Active Directory Authentication Library NuGet package
            // To install the Active Directory Authentication Library NuGet package in Visual Studio,
            //  run "Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory" from the nuget Package Manager Console.

            // AcquireToken will acquire an Azure access token
            // Call AcquireToken to get an Azure token from Azure Active Directory token issuance endpoint
            AuthenticationContext authContext = new AuthenticationContext(authorityUri);

            token = authContext.AcquireToken(resourceUri, clientID, new Uri(redirectUri)).AccessToken;

            Console.WriteLine(token);
            Console.WriteLine("getAuthenticationToken operation is successfull.");
            Console.WriteLine("***");

        }
        catch (Exception ex)
        {
            Console.WriteLine("getAuthenticationToken encounters an error: ");
            Console.WriteLine(ex.Message);
        }


        return token;
    }

    /// <summary>
    /// Azure'de veri kümesi oluşturan yordam. 
    /// </summary>
    /// <remarks> System.Net ve using System.IO eklenmeli. </remarks>
    private static void createDataset()
    {

        HttpWebRequest request = null;
        string datasetJson = null;
        //Push data into a Power BI dashboard
        try
        {

            string powerBIDatasetsApiUrl = "https://api.powerbi.com/v1.0/myorg/datasets";
            //POST web request to create a dataset.
            //To create a Dataset in a group, use the Groups uri: https://api.PowerBI.com/v1.0/myorg/groups/{group_id}/datasets

            request = System.Net.WebRequest.Create(powerBIDatasetsApiUrl) as System.Net.HttpWebRequest;
            request.KeepAlive = true;
            request.Method = "POST";

            request.ContentType = "application/json";

            if(String.IsNullOrEmpty(token))
            {
                Console.WriteLine("token is null. ");
                return;
            }

            //Add token to the request header
            request.Headers.Add("Authorization", String.Format("Bearer {0}", token));

            //Create dataset JSON for POST request
            datasetJson = "{\"name\": \"CorporationProduct\", \"tables\": " +
                "[{\"name\": \"Product\", \"columns\": " +
                "[{ \"name\": \"ProductID\", \"dataType\": \"Int64\"}, " +
                "{ \"name\": \"Name\", \"dataType\": \"string\"}, " +
                "{ \"name\": \"Category\", \"dataType\": \"string\"}," +
                "{ \"name\": \"IsCompete\", \"dataType\": \"bool\"}," +
                "{ \"name\": \"ManufacturedOn\", \"dataType\": \"DateTime\"}" +
                "]}]}";

            request.ContentLength = datasetJson.Length;
            //POST web request
            byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(datasetJson);
            request.ContentLength = byteArray.Length;

            //Write JSON byte[] into a Stream
            using (Stream writer = request.GetRequestStream())
            {
                writer.Write(byteArray, 0, byteArray.Length);
                writer.Close();
                var response = (HttpWebResponse)request.GetResponse();

                Console.WriteLine(string.Format("Dataset {0}", response.StatusCode.ToString()));

                Console.WriteLine("createDataset operation is successfull.");
                Console.WriteLine("***");

            }
        }
        catch (Exception ex)
        {
            Console.WriteLine("createDataset encounters an error: ");
            Console.WriteLine(ex.Message);
        }
    }

    private static string getDatasetId()
    {
        string datasetId = string.Empty;
        string powerBIDatasetsApiUrl = "https://api.powerbi.com/v1.0/myorg/datasets";

        try
        {

            //POST web request to create a dataset.
            //To create a Dataset in a group, use the Groups uri: https://api.PowerBI.com/v1.0/myorg/groups/{group_id}/datasets
            HttpWebRequest request = System.Net.WebRequest.Create(powerBIDatasetsApiUrl) as System.Net.HttpWebRequest;
            request.KeepAlive = true;
            request.Method = "GET";
            request.ContentLength = 0;
            request.ContentType = "application/json";

            if(String.IsNullOrEmpty(token))
            {
                Console.WriteLine("token is empty.");
                return null;
            }

            //Add token to the request header
            request.Headers.Add("Authorization", String.Format("Bearer {0}", token));


            //Get HttpWebResponse from GET request
            using (HttpWebResponse httpResponse = request.GetResponse() as System.Net.HttpWebResponse)
            {
                //Get StreamReader that holds the response stream
                using (StreamReader reader = new System.IO.StreamReader(httpResponse.GetResponseStream()))
                {
                    string responseContent = reader.ReadToEnd();

                    //TODO: Install NuGet Newtonsoft.Json package: Install-Package Newtonsoft.Json
                    //and add using Newtonsoft.Json
                    var results = JsonConvert.DeserializeObject<dynamic>(responseContent);

                    //Get the first id
                    datasetId = results["value"][0]["id"];

                    Console.WriteLine(String.Format("Dataset ID: {0}", datasetId));
                    Console.WriteLine("getDatasetId operation is successfull. ");
                    Console.WriteLine("***");

                }
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine("getDatasetId encounters an error. ");
            Console.WriteLine(ex.Message);                
        }


        return datasetId;
    }

    private static void addRowsToDataset(string DatasetId, string TabloAdi)
    {
        string powerBIApiAddRowsUrl = null;
        HttpWebRequest request = null;

        try
        {

            powerBIApiAddRowsUrl = String.Format("https://api.powerbi.com/v1.0/myorg/datasets/{0}/tables/{1}/rows", DatasetId, TabloAdi);

            //POST web request to add rows.
            //To add rows to a dataset in a group, use the Groups uri: https://api.powerbi.com/v1.0/myorg/groups/{group_id}/datasets/{dataset_id}/tables/{table_name}/rows
            //Change request method to "POST"
            request = System.Net.WebRequest.Create(powerBIApiAddRowsUrl) as System.Net.HttpWebRequest;
            request.KeepAlive = true;
            request.Method = "POST";
            request.ContentLength = 0;
            request.ContentType = "application/json";

            if(String.IsNullOrEmpty(token))
            {
                Console.WriteLine("token is empty");
                return;
            }

            //Add token to the request header
            request.Headers.Add("Authorization", String.Format("Bearer {0}", token));

            //JSON content for product row
            string rowsJson = "{\"rows\":" +
                "[{\"ProductID\":1,\"Name\":\"Adjustable Race\",\"Category\":\"Components\",\"IsCompete\":true,\"ManufacturedOn\":\"07/30/2014\"}," +
                "{\"ProductID\":2,\"Name\":\"LL Crankarm\",\"Category\":\"Components\",\"IsCompete\":true,\"ManufacturedOn\":\"07/30/2014\"}," +
                "{\"ProductID\":3,\"Name\":\"HL Mountain Frame - Silver\",\"Category\":\"Bikes\",\"IsCompete\":true,\"ManufacturedOn\":\"07/30/2014\"}]}";

            //POST web request
            byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(rowsJson);
            request.ContentLength = byteArray.Length;

            //Write JSON byte[] into a Stream
            using (Stream writer = request.GetRequestStream())
            {
                writer.Write(byteArray, 0, byteArray.Length);

                //Here is the erroneous point: 
                var response = (HttpWebResponse)request.GetResponse();

            }

            Console.WriteLine("addRowsToDataset operation is successfull. ");
            Console.WriteLine("***");

        }
        catch (Exception ex)
        {
            Console.WriteLine("addRowsToDataset encounters an error.");
            Console.WriteLine(ex.Message);
            return;
        }


    }
}
1 ACCEPTED SOLUTION

@tsozgen

The 404 error is because the passed table name is incorrect. CorporationProduct is the dataset name, while in your case, the table name should be product. 

 

addRowsToDataset(datasetId, "CorporationProduct");

 

You should also use a foreach loop in the getDataSetID function, otherwise when there're already other datasets, you code would go to error as well.

using Newtonsoft.Json;
using System;
using System.IO;
using System.Net;

class Program
{
    private static string token = string.Empty;

    static void Main(string[] args)
    {
        string datasetId = string.Empty;

        try
        {
            token = getAuthenticationToken();

            createDataset();

            datasetId = getDatasetId();

            

            addRowsToDataset(datasetId, "Product");

            Console.ReadKey();
        }
        catch (Exception ex)
        {
            Console.WriteLine("An error occured in main function. ");
            Console.WriteLine(ex.Message);
        }

    }

    private static string getAuthenticationToken()
    {
        string token = null;


        // TODO: Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory -Version 2.21.301221612
        // and add using Microsoft.IdentityModel.Clients.ActiveDirectory
        try
        {

            //The client id that Azure AD created when you registered your client app.
            string clientID = "myclientid";

            //RedirectUri you used when you register your app.
            //For a client app, a redirect uri gives Azure AD more details on the application that it will authenticate.
            // You can use this redirect uri for your client app
            string redirectUri = "https://login.live.com/oauth20_desktop.srf";

            //Resource Uri for Power BI API
            string resourceUri = "https://analysis.windows.net/powerbi/api";

            //OAuth2 authority Uri
            string authorityUri = "https://login.windows.net/common/oauth2/authorize";

            //Get access token:
            // To call a Power BI REST operation, create an instance of AuthenticationContext and call AcquireToken
            // AuthenticationContext is part of the Active Directory Authentication Library NuGet package
            // To install the Active Directory Authentication Library NuGet package in Visual Studio,
            //  run "Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory" from the nuget Package Manager Console.

            // AcquireToken will acquire an Azure access token
            // Call AcquireToken to get an Azure token from Azure Active Directory token issuance endpoint
            AuthenticationContext authContext = new AuthenticationContext(authorityUri);

            token = authContext.AcquireToken(resourceUri, clientID, new Uri(redirectUri)).AccessToken;
            Console.WriteLine(token);
            Console.WriteLine("getAuthenticationToken operation is successfull.");
            Console.WriteLine("***");

        }
        catch (Exception ex)
        {
            Console.WriteLine("getAuthenticationToken encounters an error: ");
            Console.WriteLine(ex.Message);
        }


        return token;
    }

    /// <summary>
    /// Azure'de veri kümesi oluşturan yordam. 
    /// </summary>
    /// <remarks> System.Net ve using System.IO eklenmeli. </remarks>
    private static void createDataset()
    {

        HttpWebRequest request = null;
        string datasetJson = null;
        //Push data into a Power BI dashboard
        try
        {

            string powerBIDatasetsApiUrl = "https://api.powerbi.com/v1.0/myorg/datasets";
            //POST web request to create a dataset.
            //To create a Dataset in a group, use the Groups uri: https://api.PowerBI.com/v1.0/myorg/groups/{group_id}/datasets

            request = System.Net.WebRequest.Create(powerBIDatasetsApiUrl) as System.Net.HttpWebRequest;
            request.KeepAlive = true;
            request.Method = "POST";

            request.ContentType = "application/json";

            if (String.IsNullOrEmpty(token))
            {
                Console.WriteLine("token is null. ");
                return;
            }

            //Add token to the request header
            request.Headers.Add("Authorization", String.Format("Bearer {0}", token));

            //Create dataset JSON for POST request
            datasetJson = "{\"name\": \"CorporationProduct\", \"tables\": " +
                "[{\"name\": \"Product\", \"columns\": " +
                "[{ \"name\": \"ProductID\", \"dataType\": \"Int64\"}, " +
                "{ \"name\": \"Name\", \"dataType\": \"string\"}, " +
                "{ \"name\": \"Category\", \"dataType\": \"string\"}," +
                "{ \"name\": \"IsCompete\", \"dataType\": \"bool\"}," +
                "{ \"name\": \"ManufacturedOn\", \"dataType\": \"DateTime\"}" +
                "]}]}";

            request.ContentLength = datasetJson.Length;
            //POST web request
            byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(datasetJson);
            request.ContentLength = byteArray.Length;

            //Write JSON byte[] into a Stream
            using (Stream writer = request.GetRequestStream())
            {
                writer.Write(byteArray, 0, byteArray.Length);
                writer.Close();
                var response = (HttpWebResponse)request.GetResponse();

                Console.WriteLine(string.Format("Dataset {0}", response.StatusCode.ToString()));

                Console.WriteLine("createDataset operation is successfull.");
                Console.WriteLine("***");

            }
        }
        catch (Exception ex)
        {
            Console.WriteLine("createDataset encounters an error: ");
            Console.WriteLine(ex.Message);
        }
    }

    private static string getDatasetId()
    {
        string datasetId = string.Empty;
        string powerBIDatasetsApiUrl = "https://api.powerbi.com/v1.0/myorg/datasets";

        try
        {

            //POST web request to create a dataset.
            //To create a Dataset in a group, use the Groups uri: https://api.PowerBI.com/v1.0/myorg/groups/{group_id}/datasets
            HttpWebRequest request = System.Net.WebRequest.Create(powerBIDatasetsApiUrl) as System.Net.HttpWebRequest;
            request.KeepAlive = true;
            request.Method = "GET";
            request.ContentLength = 0;
            request.ContentType = "application/json";

            if (String.IsNullOrEmpty(token))
            {
                Console.WriteLine("token is empty.");
                return null;
            }

            //Add token to the request header
            request.Headers.Add("Authorization", String.Format("Bearer {0}", token));


            //Get HttpWebResponse from GET request
            using (HttpWebResponse httpResponse = request.GetResponse() as System.Net.HttpWebResponse)
            {
                //Get StreamReader that holds the response stream
                using (StreamReader reader = new System.IO.StreamReader(httpResponse.GetResponseStream()))
                {
                    string responseContent = reader.ReadToEnd();

                    //TODO: Install NuGet Newtonsoft.Json package: Install-Package Newtonsoft.Json
                    //and add using Newtonsoft.Json
                    var results = JsonConvert.DeserializeObject<dynamic>(responseContent);

                    //Get the first id
                    //datasetId = results["value"][0]["id"];

                    foreach (var result in results["value"]) {
                        if (result["name"] == "CorporationProduct") {

                            datasetId = result["id"];
                        }


                    }


                    Console.WriteLine(String.Format("Dataset ID: {0}", datasetId));
                    Console.WriteLine("getDatasetId operation is successfull. ");
                    Console.WriteLine("***");

                }
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine("getDatasetId encounters an error. ");
            Console.WriteLine(ex.Message);
        }


        return datasetId;
    }

    private static void addRowsToDataset(string DatasetId, string TabloAdi)
    {
        string powerBIApiAddRowsUrl = null;
        HttpWebRequest request = null;

        try
        {

            powerBIApiAddRowsUrl = String.Format("https://api.powerbi.com/v1.0/myorg/datasets/{0}/tables/{1}/rows", DatasetId, TabloAdi);

            //POST web request to add rows.
            //To add rows to a dataset in a group, use the Groups uri: https://api.powerbi.com/v1.0/myorg/groups/{group_id}/datasets/{dataset_id}/tables/{table_name}/rows
            //Change request method to "POST"
            request = System.Net.WebRequest.Create(powerBIApiAddRowsUrl) as System.Net.HttpWebRequest;
            request.KeepAlive = true;
            request.Method = "POST";
            request.ContentLength = 0;
            request.ContentType = "application/json";

            if (String.IsNullOrEmpty(token))
            {
                Console.WriteLine("token is empty");
                return;
            }

            //Add token to the request header
            request.Headers.Add("Authorization", String.Format("Bearer {0}", token));

            //JSON content for product row
            string rowsJson = "{\"rows\":" +
                "[{\"ProductID\":1,\"Name\":\"Adjustable Race\",\"Category\":\"Components\",\"IsCompete\":true,\"ManufacturedOn\":\"07/30/2014\"}," +
                "{\"ProductID\":2,\"Name\":\"LL Crankarm\",\"Category\":\"Components\",\"IsCompete\":true,\"ManufacturedOn\":\"07/30/2014\"}," +
                "{\"ProductID\":3,\"Name\":\"HL Mountain Frame - Silver\",\"Category\":\"Bikes\",\"IsCompete\":true,\"ManufacturedOn\":\"07/30/2014\"}]}";

            //POST web request
            byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(rowsJson);
            request.ContentLength = byteArray.Length;

            //Write JSON byte[] into a Stream
            using (Stream writer = request.GetRequestStream())
            {
                writer.Write(byteArray, 0, byteArray.Length);

                //Here is the erroneous point: 
                var response = (HttpWebResponse)request.GetResponse();

            }

            Console.WriteLine("addRowsToDataset operation is successfull. ");
            Console.WriteLine("***");

        }
        catch (Exception ex)
        {
            Console.WriteLine("addRowsToDataset encounters an error.");
            Console.WriteLine(ex.Message);
            return;
        }


    }
}

 

View solution in original post

3 REPLIES 3
tsozgen
New Member

Hi There;
I try to impement the power bi solution located there; https://powerbi.microsoft.com/en-us/documentation/powerbi-developer-walkthrough-push-data-register-a... My data resides at the azure cloud. Dataset is created successfully, however, there is a problem in addRowsToDataset function. What am I missing? Thanks in advance.

 

class Program
{
    private static string token = string.Empty;

    static void Main(string[] args)
    {
        string datasetId = string.Empty;

        try
        {
            token = getAuthenticationToken();

            datasetId = getDatasetId();

            createDataset();

            addRowsToDataset(datasetId, "CorporationProduct");

            Console.ReadKey();
        }
        catch (Exception ex)
        {
            Console.WriteLine("An error occured in main function. ");
            Console.WriteLine(ex.Message);
        }

    }

    private static string getAuthenticationToken()
    {
        string token = null;


        // TODO: Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory -Version 2.21.301221612
        // and add using Microsoft.IdentityModel.Clients.ActiveDirectory
        try
        {

            //The client id that Azure AD created when you registered your client app.
            string clientID = "myclientid";

            //RedirectUri you used when you register your app.
            //For a client app, a redirect uri gives Azure AD more details on the application that it will authenticate.
            // You can use this redirect uri for your client app
            string redirectUri = "https://login.live.com/oauth20_desktop.srf";

            //Resource Uri for Power BI API
            string resourceUri = "https://analysis.windows.net/powerbi/api";

            //OAuth2 authority Uri
            string authorityUri = "https://login.windows.net/common/oauth2/authorize";

            //Get access token:
            // To call a Power BI REST operation, create an instance of AuthenticationContext and call AcquireToken
            // AuthenticationContext is part of the Active Directory Authentication Library NuGet package
            // To install the Active Directory Authentication Library NuGet package in Visual Studio,
            //  run "Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory" from the nuget Package Manager Console.

            // AcquireToken will acquire an Azure access token
            // Call AcquireToken to get an Azure token from Azure Active Directory token issuance endpoint
            AuthenticationContext authContext = new AuthenticationContext(authorityUri);

            token = authContext.AcquireToken(resourceUri, clientID, new Uri(redirectUri)).AccessToken;

            Console.WriteLine(token);
            Console.WriteLine("getAuthenticationToken operation is successfull.");
            Console.WriteLine("***");

        }
        catch (Exception ex)
        {
            Console.WriteLine("getAuthenticationToken encounters an error: ");
            Console.WriteLine(ex.Message);
        }


        return token;
    }

    /// <summary>
    /// Azure'de veri kümesi oluşturan yordam. 
    /// </summary>
    /// <remarks> System.Net ve using System.IO eklenmeli. </remarks>
    private static void createDataset()
    {

        HttpWebRequest request = null;
        string datasetJson = null;
        //Push data into a Power BI dashboard
        try
        {

            string powerBIDatasetsApiUrl = "https://api.powerbi.com/v1.0/myorg/datasets";
            //POST web request to create a dataset.
            //To create a Dataset in a group, use the Groups uri: https://api.PowerBI.com/v1.0/myorg/groups/{group_id}/datasets

            request = System.Net.WebRequest.Create(powerBIDatasetsApiUrl) as System.Net.HttpWebRequest;
            request.KeepAlive = true;
            request.Method = "POST";

            request.ContentType = "application/json";

            if(String.IsNullOrEmpty(token))
            {
                Console.WriteLine("token is null. ");
                return;
            }

            //Add token to the request header
            request.Headers.Add("Authorization", String.Format("Bearer {0}", token));

            //Create dataset JSON for POST request
            datasetJson = "{\"name\": \"CorporationProduct\", \"tables\": " +
                "[{\"name\": \"Product\", \"columns\": " +
                "[{ \"name\": \"ProductID\", \"dataType\": \"Int64\"}, " +
                "{ \"name\": \"Name\", \"dataType\": \"string\"}, " +
                "{ \"name\": \"Category\", \"dataType\": \"string\"}," +
                "{ \"name\": \"IsCompete\", \"dataType\": \"bool\"}," +
                "{ \"name\": \"ManufacturedOn\", \"dataType\": \"DateTime\"}" +
                "]}]}";

            request.ContentLength = datasetJson.Length;
            //POST web request
            byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(datasetJson);
            request.ContentLength = byteArray.Length;

            //Write JSON byte[] into a Stream
            using (Stream writer = request.GetRequestStream())
            {
                writer.Write(byteArray, 0, byteArray.Length);
                writer.Close();
                var response = (HttpWebResponse)request.GetResponse();

                Console.WriteLine(string.Format("Dataset {0}", response.StatusCode.ToString()));

                Console.WriteLine("createDataset operation is successfull.");
                Console.WriteLine("***");

            }
        }
        catch (Exception ex)
        {
            Console.WriteLine("createDataset encounters an error: ");
            Console.WriteLine(ex.Message);
        }
    }

    private static string getDatasetId()
    {
        string datasetId = string.Empty;
        string powerBIDatasetsApiUrl = "https://api.powerbi.com/v1.0/myorg/datasets";

        try
        {

            //POST web request to create a dataset.
            //To create a Dataset in a group, use the Groups uri: https://api.PowerBI.com/v1.0/myorg/groups/{group_id}/datasets
            HttpWebRequest request = System.Net.WebRequest.Create(powerBIDatasetsApiUrl) as System.Net.HttpWebRequest;
            request.KeepAlive = true;
            request.Method = "GET";
            request.ContentLength = 0;
            request.ContentType = "application/json";

            if(String.IsNullOrEmpty(token))
            {
                Console.WriteLine("token is empty.");
                return null;
            }

            //Add token to the request header
            request.Headers.Add("Authorization", String.Format("Bearer {0}", token));


            //Get HttpWebResponse from GET request
            using (HttpWebResponse httpResponse = request.GetResponse() as System.Net.HttpWebResponse)
            {
                //Get StreamReader that holds the response stream
                using (StreamReader reader = new System.IO.StreamReader(httpResponse.GetResponseStream()))
                {
                    string responseContent = reader.ReadToEnd();

                    //TODO: Install NuGet Newtonsoft.Json package: Install-Package Newtonsoft.Json
                    //and add using Newtonsoft.Json
                    var results = JsonConvert.DeserializeObject<dynamic>(responseContent);

                    //Get the first id
                    datasetId = results["value"][0]["id"];

                    Console.WriteLine(String.Format("Dataset ID: {0}", datasetId));
                    Console.WriteLine("getDatasetId operation is successfull. ");
                    Console.WriteLine("***");

                }
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine("getDatasetId encounters an error. ");
            Console.WriteLine(ex.Message);                
        }


        return datasetId;
    }

    private static void addRowsToDataset(string DatasetId, string TabloAdi)
    {
        string powerBIApiAddRowsUrl = null;
        HttpWebRequest request = null;

        try
        {

            powerBIApiAddRowsUrl = String.Format("https://api.powerbi.com/v1.0/myorg/datasets/{0}/tables/{1}/rows", DatasetId, TabloAdi);

            //POST web request to add rows.
            //To add rows to a dataset in a group, use the Groups uri: https://api.powerbi.com/v1.0/myorg/groups/{group_id}/datasets/{dataset_id}/tables/{table_name}/rows
            //Change request method to "POST"
            request = System.Net.WebRequest.Create(powerBIApiAddRowsUrl) as System.Net.HttpWebRequest;
            request.KeepAlive = true;
            request.Method = "POST";
            request.ContentLength = 0;
            request.ContentType = "application/json";

            if(String.IsNullOrEmpty(token))
            {
                Console.WriteLine("token is empty");
                return;
            }

            //Add token to the request header
            request.Headers.Add("Authorization", String.Format("Bearer {0}", token));

            //JSON content for product row
            string rowsJson = "{\"rows\":" +
                "[{\"ProductID\":1,\"Name\":\"Adjustable Race\",\"Category\":\"Components\",\"IsCompete\":true,\"ManufacturedOn\":\"07/30/2014\"}," +
                "{\"ProductID\":2,\"Name\":\"LL Crankarm\",\"Category\":\"Components\",\"IsCompete\":true,\"ManufacturedOn\":\"07/30/2014\"}," +
                "{\"ProductID\":3,\"Name\":\"HL Mountain Frame - Silver\",\"Category\":\"Bikes\",\"IsCompete\":true,\"ManufacturedOn\":\"07/30/2014\"}]}";

            //POST web request
            byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(rowsJson);
            request.ContentLength = byteArray.Length;

            //Write JSON byte[] into a Stream
            using (Stream writer = request.GetRequestStream())
            {
                writer.Write(byteArray, 0, byteArray.Length);

                //Here is the erroneous point: 
                var response = (HttpWebResponse)request.GetResponse();

            }

            Console.WriteLine("addRowsToDataset operation is successfull. ");
            Console.WriteLine("***");

        }
        catch (Exception ex)
        {
            Console.WriteLine("addRowsToDataset encounters an error.");
            Console.WriteLine(ex.Message);
            return;
        }


    }
}

 

@tsozgen

The 404 error is because the passed table name is incorrect. CorporationProduct is the dataset name, while in your case, the table name should be product. 

 

addRowsToDataset(datasetId, "CorporationProduct");

 

You should also use a foreach loop in the getDataSetID function, otherwise when there're already other datasets, you code would go to error as well.

using Newtonsoft.Json;
using System;
using System.IO;
using System.Net;

class Program
{
    private static string token = string.Empty;

    static void Main(string[] args)
    {
        string datasetId = string.Empty;

        try
        {
            token = getAuthenticationToken();

            createDataset();

            datasetId = getDatasetId();

            

            addRowsToDataset(datasetId, "Product");

            Console.ReadKey();
        }
        catch (Exception ex)
        {
            Console.WriteLine("An error occured in main function. ");
            Console.WriteLine(ex.Message);
        }

    }

    private static string getAuthenticationToken()
    {
        string token = null;


        // TODO: Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory -Version 2.21.301221612
        // and add using Microsoft.IdentityModel.Clients.ActiveDirectory
        try
        {

            //The client id that Azure AD created when you registered your client app.
            string clientID = "myclientid";

            //RedirectUri you used when you register your app.
            //For a client app, a redirect uri gives Azure AD more details on the application that it will authenticate.
            // You can use this redirect uri for your client app
            string redirectUri = "https://login.live.com/oauth20_desktop.srf";

            //Resource Uri for Power BI API
            string resourceUri = "https://analysis.windows.net/powerbi/api";

            //OAuth2 authority Uri
            string authorityUri = "https://login.windows.net/common/oauth2/authorize";

            //Get access token:
            // To call a Power BI REST operation, create an instance of AuthenticationContext and call AcquireToken
            // AuthenticationContext is part of the Active Directory Authentication Library NuGet package
            // To install the Active Directory Authentication Library NuGet package in Visual Studio,
            //  run "Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory" from the nuget Package Manager Console.

            // AcquireToken will acquire an Azure access token
            // Call AcquireToken to get an Azure token from Azure Active Directory token issuance endpoint
            AuthenticationContext authContext = new AuthenticationContext(authorityUri);

            token = authContext.AcquireToken(resourceUri, clientID, new Uri(redirectUri)).AccessToken;
            Console.WriteLine(token);
            Console.WriteLine("getAuthenticationToken operation is successfull.");
            Console.WriteLine("***");

        }
        catch (Exception ex)
        {
            Console.WriteLine("getAuthenticationToken encounters an error: ");
            Console.WriteLine(ex.Message);
        }


        return token;
    }

    /// <summary>
    /// Azure'de veri kümesi oluşturan yordam. 
    /// </summary>
    /// <remarks> System.Net ve using System.IO eklenmeli. </remarks>
    private static void createDataset()
    {

        HttpWebRequest request = null;
        string datasetJson = null;
        //Push data into a Power BI dashboard
        try
        {

            string powerBIDatasetsApiUrl = "https://api.powerbi.com/v1.0/myorg/datasets";
            //POST web request to create a dataset.
            //To create a Dataset in a group, use the Groups uri: https://api.PowerBI.com/v1.0/myorg/groups/{group_id}/datasets

            request = System.Net.WebRequest.Create(powerBIDatasetsApiUrl) as System.Net.HttpWebRequest;
            request.KeepAlive = true;
            request.Method = "POST";

            request.ContentType = "application/json";

            if (String.IsNullOrEmpty(token))
            {
                Console.WriteLine("token is null. ");
                return;
            }

            //Add token to the request header
            request.Headers.Add("Authorization", String.Format("Bearer {0}", token));

            //Create dataset JSON for POST request
            datasetJson = "{\"name\": \"CorporationProduct\", \"tables\": " +
                "[{\"name\": \"Product\", \"columns\": " +
                "[{ \"name\": \"ProductID\", \"dataType\": \"Int64\"}, " +
                "{ \"name\": \"Name\", \"dataType\": \"string\"}, " +
                "{ \"name\": \"Category\", \"dataType\": \"string\"}," +
                "{ \"name\": \"IsCompete\", \"dataType\": \"bool\"}," +
                "{ \"name\": \"ManufacturedOn\", \"dataType\": \"DateTime\"}" +
                "]}]}";

            request.ContentLength = datasetJson.Length;
            //POST web request
            byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(datasetJson);
            request.ContentLength = byteArray.Length;

            //Write JSON byte[] into a Stream
            using (Stream writer = request.GetRequestStream())
            {
                writer.Write(byteArray, 0, byteArray.Length);
                writer.Close();
                var response = (HttpWebResponse)request.GetResponse();

                Console.WriteLine(string.Format("Dataset {0}", response.StatusCode.ToString()));

                Console.WriteLine("createDataset operation is successfull.");
                Console.WriteLine("***");

            }
        }
        catch (Exception ex)
        {
            Console.WriteLine("createDataset encounters an error: ");
            Console.WriteLine(ex.Message);
        }
    }

    private static string getDatasetId()
    {
        string datasetId = string.Empty;
        string powerBIDatasetsApiUrl = "https://api.powerbi.com/v1.0/myorg/datasets";

        try
        {

            //POST web request to create a dataset.
            //To create a Dataset in a group, use the Groups uri: https://api.PowerBI.com/v1.0/myorg/groups/{group_id}/datasets
            HttpWebRequest request = System.Net.WebRequest.Create(powerBIDatasetsApiUrl) as System.Net.HttpWebRequest;
            request.KeepAlive = true;
            request.Method = "GET";
            request.ContentLength = 0;
            request.ContentType = "application/json";

            if (String.IsNullOrEmpty(token))
            {
                Console.WriteLine("token is empty.");
                return null;
            }

            //Add token to the request header
            request.Headers.Add("Authorization", String.Format("Bearer {0}", token));


            //Get HttpWebResponse from GET request
            using (HttpWebResponse httpResponse = request.GetResponse() as System.Net.HttpWebResponse)
            {
                //Get StreamReader that holds the response stream
                using (StreamReader reader = new System.IO.StreamReader(httpResponse.GetResponseStream()))
                {
                    string responseContent = reader.ReadToEnd();

                    //TODO: Install NuGet Newtonsoft.Json package: Install-Package Newtonsoft.Json
                    //and add using Newtonsoft.Json
                    var results = JsonConvert.DeserializeObject<dynamic>(responseContent);

                    //Get the first id
                    //datasetId = results["value"][0]["id"];

                    foreach (var result in results["value"]) {
                        if (result["name"] == "CorporationProduct") {

                            datasetId = result["id"];
                        }


                    }


                    Console.WriteLine(String.Format("Dataset ID: {0}", datasetId));
                    Console.WriteLine("getDatasetId operation is successfull. ");
                    Console.WriteLine("***");

                }
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine("getDatasetId encounters an error. ");
            Console.WriteLine(ex.Message);
        }


        return datasetId;
    }

    private static void addRowsToDataset(string DatasetId, string TabloAdi)
    {
        string powerBIApiAddRowsUrl = null;
        HttpWebRequest request = null;

        try
        {

            powerBIApiAddRowsUrl = String.Format("https://api.powerbi.com/v1.0/myorg/datasets/{0}/tables/{1}/rows", DatasetId, TabloAdi);

            //POST web request to add rows.
            //To add rows to a dataset in a group, use the Groups uri: https://api.powerbi.com/v1.0/myorg/groups/{group_id}/datasets/{dataset_id}/tables/{table_name}/rows
            //Change request method to "POST"
            request = System.Net.WebRequest.Create(powerBIApiAddRowsUrl) as System.Net.HttpWebRequest;
            request.KeepAlive = true;
            request.Method = "POST";
            request.ContentLength = 0;
            request.ContentType = "application/json";

            if (String.IsNullOrEmpty(token))
            {
                Console.WriteLine("token is empty");
                return;
            }

            //Add token to the request header
            request.Headers.Add("Authorization", String.Format("Bearer {0}", token));

            //JSON content for product row
            string rowsJson = "{\"rows\":" +
                "[{\"ProductID\":1,\"Name\":\"Adjustable Race\",\"Category\":\"Components\",\"IsCompete\":true,\"ManufacturedOn\":\"07/30/2014\"}," +
                "{\"ProductID\":2,\"Name\":\"LL Crankarm\",\"Category\":\"Components\",\"IsCompete\":true,\"ManufacturedOn\":\"07/30/2014\"}," +
                "{\"ProductID\":3,\"Name\":\"HL Mountain Frame - Silver\",\"Category\":\"Bikes\",\"IsCompete\":true,\"ManufacturedOn\":\"07/30/2014\"}]}";

            //POST web request
            byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(rowsJson);
            request.ContentLength = byteArray.Length;

            //Write JSON byte[] into a Stream
            using (Stream writer = request.GetRequestStream())
            {
                writer.Write(byteArray, 0, byteArray.Length);

                //Here is the erroneous point: 
                var response = (HttpWebResponse)request.GetResponse();

            }

            Console.WriteLine("addRowsToDataset operation is successfull. ");
            Console.WriteLine("***");

        }
        catch (Exception ex)
        {
            Console.WriteLine("addRowsToDataset encounters an error.");
            Console.WriteLine(ex.Message);
            return;
        }


    }
}

 

I have almost the same code and I'm trying to follow this guide: https://powerbi.microsoft.com/en-us/documentation/powerbi-developer-walkthrough-push-data-register-a...

 

I get error on line 186

var response = (HttpWebResponse)request.GetResponse();

Error message: System.Net.WebException (404)

 

My code seem to be a bit different than yours from the Add rows to a Power BI table part:

using System;
using Microsoft.IdentityModel.Clients.ActiveDirectory;
using System.Net;
using System.IO;
using Newtonsoft.Json;

namespace walkthrough_push_data
{
    class Program
    {
        private static string token = string.Empty;

        static void Main(string[] args)
        {

            //Get an authentication access token
            token = GetToken();

            //Create a dataset in Power BI
            CreateDataset();

            //Get a dataset to add rows into a Power BI table
            string datasetId = GetDataset();

            //Add rows to a Power BI table
            AddRows(datasetId, "Product");

        }

        #region Get an authentication access token
        private static string GetToken()
        {
            // TODO: Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory -Version 2.21.301221612
            // and add using Microsoft.IdentityModel.Clients.ActiveDirectory

            //The client id that Azure AD created when you registered your client app.
            string clientID = "mycliendID";

            //RedirectUri you used when you register your app.
            //For a client app, a redirect uri gives Azure AD more details on the application that it will authenticate.
            // You can use this redirect uri for your client app
            string redirectUri = "https://login.live.com/oauth20_desktop.srf";

            //Resource Uri for Power BI API
            string resourceUri = "https://analysis.windows.net/powerbi/api";

            //OAuth2 authority Uri
            string authorityUri = "https://login.windows.net/common/oauth2/authorize";

            //Get access token:
            // To call a Power BI REST operation, create an instance of AuthenticationContext and call AcquireToken
            // AuthenticationContext is part of the Active Directory Authentication Library NuGet package
            // To install the Active Directory Authentication Library NuGet package in Visual Studio,
            //  run "Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory" from the nuget Package Manager Console.

            // AcquireToken will acquire an Azure access token
            // Call AcquireToken to get an Azure token from Azure Active Directory token issuance endpoint
            AuthenticationContext authContext = new AuthenticationContext(authorityUri);
            string token = authContext.AcquireToken(resourceUri, clientID, new Uri(redirectUri)).AccessToken;

            Console.WriteLine(token);
            Console.ReadLine();

            return token;
        }

        #endregion

        #region Create a dataset in a Power BI
        private static void CreateDataset()
        {
            //TODO: Add using System.Net and using System.IO

            string powerBIDatasetsApiUrl = "https://api.powerbi.com/v1.0/myorg/datasets";
            //POST web request to create a dataset.
            //To create a Dataset in a group, use the Groups uri: https://api.PowerBI.com/v1.0/myorg/groups/{group_id}/datasets
            HttpWebRequest request = System.Net.WebRequest.Create(powerBIDatasetsApiUrl) as System.Net.HttpWebRequest;
            request.KeepAlive = true;
            request.Method = "POST";
            request.ContentLength = 0;
            request.ContentType = "application/json";

            //Add token to the request header
            request.Headers.Add("Authorization", String.Format("Bearer {0}", token));

            //Create dataset JSON for POST request
            string datasetJson = "{\"name\": \"SalesMarketing\", \"tables\": " +
                "[{\"name\": \"Product\", \"columns\": " +
                "[{ \"name\": \"ProductID\", \"dataType\": \"Int64\"}, " +
                "{ \"name\": \"Name\", \"dataType\": \"string\"}, " +
                "{ \"name\": \"Category\", \"dataType\": \"string\"}," +
                "{ \"name\": \"IsCompete\", \"dataType\": \"bool\"}," +
                "{ \"name\": \"ManufacturedOn\", \"dataType\": \"DateTime\"}" +
                "]}]}";

            //POST web request
            byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(datasetJson);
            request.ContentLength = byteArray.Length;

            //Write JSON byte[] into a Stream
            using (Stream writer = request.GetRequestStream())
            {
                writer.Write(byteArray, 0, byteArray.Length);

                var response = (HttpWebResponse)request.GetResponse();

                Console.WriteLine(string.Format("Dataset {0}", response.StatusCode.ToString()));

                Console.ReadLine();
            }
        }
        #endregion

        #region Get a dataset to add rows into a Power BI table
        private static string GetDataset()
        {
            string powerBIDatasetsApiUrl = "https://api.powerbi.com/v1.0/myorg/datasets";
            //POST web request to create a dataset.
            //To create a Dataset in a group, use the Groups uri: https://api.PowerBI.com/v1.0/myorg/groups/{group_id}/datasets
            HttpWebRequest request = System.Net.WebRequest.Create(powerBIDatasetsApiUrl) as System.Net.HttpWebRequest;
            request.KeepAlive = true;
            request.Method = "GET";
            request.ContentLength = 0;
            request.ContentType = "application/json";

            //Add token to the request header
            request.Headers.Add("Authorization", String.Format("Bearer {0}", token));

            string datasetId = string.Empty;
            //Get HttpWebResponse from GET request
            using (HttpWebResponse httpResponse = request.GetResponse() as System.Net.HttpWebResponse)
            {
                //Get StreamReader that holds the response stream
                using (StreamReader reader = new System.IO.StreamReader(httpResponse.GetResponseStream()))
                {
                    string responseContent = reader.ReadToEnd();

                    //TODO: Install NuGet Newtonsoft.Json package: Install-Package Newtonsoft.Json
                    //and add using Newtonsoft.Json
                    var results = JsonConvert.DeserializeObject<dynamic>(responseContent);

                    //Get the first id
                    datasetId = results["value"][0]["id"];

                    Console.WriteLine(String.Format("Dataset ID: {0}", datasetId));
                    Console.ReadLine();

                    return datasetId;
                }
            }
        }
        #endregion

        #region Add rows to a Power BI table
        private static void AddRows(string datasetId, string tableName)
        {
            string powerBIApiAddRowsUrl = String.Format("https://api.powerbi.com/v1.0/myorg/datasets/{0}/tables/{1}/rows", datasetId, tableName);

            //POST web request to add rows.
            //To add rows to a dataset in a group, use the Groups uri: https://api.powerbi.com/v1.0/myorg/groups/{group_id}/datasets/{dataset_id}/tables/{table_name}/rows
            //Change request method to "POST"
            HttpWebRequest request = System.Net.WebRequest.Create(powerBIApiAddRowsUrl) as System.Net.HttpWebRequest;
            request.KeepAlive = true;
            request.Method = "POST";
            request.ContentLength = 0;
            request.ContentType = "application/json";

            //Add token to the request header
            request.Headers.Add("Authorization", String.Format("Bearer {0}", token));

            //JSON content for product row
            string rowsJson = "{\"rows\":" +
                "[{\"ProductID\":1,\"Name\":\"Adjustable Race\",\"Category\":\"Components\",\"IsCompete\":true,\"ManufacturedOn\":\"07/30/2014\"}," +
                "{\"ProductID\":2,\"Name\":\"LL Crankarm\",\"Category\":\"Components\",\"IsCompete\":true,\"ManufacturedOn\":\"07/30/2014\"}," +
                "{\"ProductID\":3,\"Name\":\"HL Mountain Frame - Silver\",\"Category\":\"Bikes\",\"IsCompete\":true,\"ManufacturedOn\":\"07/30/2014\"}]}";

            //POST web request
            byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(rowsJson);
            request.ContentLength = byteArray.Length;

            //Write JSON byte[] into a Stream
            using (Stream writer = request.GetRequestStream())
            {
                writer.Write(byteArray, 0, byteArray.Length);

                var response = (HttpWebResponse)request.GetResponse();

                Console.WriteLine("Rows Added");

                Console.ReadLine();
            }
        }

        #endregion
    }
}

I have copied this code from step5 page. Everything seems to be working correctly until this step.

 

Any advice?

Helpful resources

Announcements
PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

Check out the April 2024 Power BI update to learn about new features.