Forum Discussion

daveParso's avatar
daveParso
Frequent Visitor
9 years ago
Solved

PostRowsInGroups is giving badRequest from Json object

I have the following code to create a json object and then post this to a streaming dataset in powerBI. With the code i have so far i seem to be finding the dataset and table just fine but i am getting a badrequest on my json object. Is there something simple im missing in the code below that is preventing this from working?

 

using (var client = new PowerBIClient(new Uri(ApiUrl), tokenCredentials))
{
    var payload = new testValues
    {
        value1 = "test",
        value2 = counter,
        value3 = DateTime.UtcNow
    };
    string stringPayload = JsonConvert.SerializeObject(payload);
    StringContent postContent = new StringContent(stringPayload, Encoding.UTF8, "application/json");
            
    ODataResponseListDataset datasets = client.Datasets.GetDatasetsInGroup(GroupId);
    client.Datasets.PostRowsInGroup(GroupId, datasets.Value.LastOrDefault().Id, "RealTimeData", postContent);
    counter++;
    return;
}

and below is the testValues class just incase that can also shed some light on my issue here:

public class testValues
{
    [JsonProperty("value1")]
    public string value1 { get; set; }

    [JsonProperty("value2")]
    public int value2 { get; set; }

    [JsonProperty("value3")]
    public DateTime value3 { get; set; }
}
  • daveParso

    You can add try..catch blocks to get the bad request details.

    try
                    {
                        client.Datasets.PostRowsInGroup(groupId, yourdatesetid, "RealTimeData", dataObj);
                    }
    catch (HttpOperationException ex)
                   { 
                        //Bad Request
                        var content = ex.Response.Content;
                        Console.WriteLine(content); 
                    }

    Based on my test, my below demo work.

     

            static void Main(string[] args)
            {
                var credentials = new TokenCredentials(accessToken);
                using (var client = new PowerBIClient( credentials))
                {
                    var payload = new testValues
                    {
                        value1 = "test",
                        value2 = 1,
                        value3 = DateTime.UtcNow
                       // value3 = DateTime.UtcNow.ToString("s") + "Z"
                    };
    
                    IList<testValues> list = new List<testValues>();
    
                    list.Add(payload);
    
                    var stringPayload = JsonConvert.SerializeObject(list);
                    object dataObj = Newtonsoft.Json.JsonConvert.DeserializeObject<Object>(stringPayload.ToString());
                    //StringContent postContent = new StringContent(stringPayload, Encoding.UTF8, "application/json");
                    try
                    {
                        client.Datasets.PostRowsInGroup(groupId,datasetId, "RealTimeData", dataObj);
                    }
                    catch (HttpOperationException ex)
                   { 
                        //Bad Request
                        var content = ex.Response.Content;
                        Console.WriteLine(content); 
                    }
                     
                }
    
                Console.WriteLine("Done");
                Console.ReadKey();
    
            }

1 Reply

  • Eric_Zhang's avatar
    Eric_Zhang
    Microsoft Employee

    daveParso

    You can add try..catch blocks to get the bad request details.

    try
                    {
                        client.Datasets.PostRowsInGroup(groupId, yourdatesetid, "RealTimeData", dataObj);
                    }
    catch (HttpOperationException ex)
                   { 
                        //Bad Request
                        var content = ex.Response.Content;
                        Console.WriteLine(content); 
                    }

    Based on my test, my below demo work.

     

            static void Main(string[] args)
            {
                var credentials = new TokenCredentials(accessToken);
                using (var client = new PowerBIClient( credentials))
                {
                    var payload = new testValues
                    {
                        value1 = "test",
                        value2 = 1,
                        value3 = DateTime.UtcNow
                       // value3 = DateTime.UtcNow.ToString("s") + "Z"
                    };
    
                    IList<testValues> list = new List<testValues>();
    
                    list.Add(payload);
    
                    var stringPayload = JsonConvert.SerializeObject(list);
                    object dataObj = Newtonsoft.Json.JsonConvert.DeserializeObject<Object>(stringPayload.ToString());
                    //StringContent postContent = new StringContent(stringPayload, Encoding.UTF8, "application/json");
                    try
                    {
                        client.Datasets.PostRowsInGroup(groupId,datasetId, "RealTimeData", dataObj);
                    }
                    catch (HttpOperationException ex)
                   { 
                        //Bad Request
                        var content = ex.Response.Content;
                        Console.WriteLine(content); 
                    }
                     
                }
    
                Console.WriteLine("Done");
                Console.ReadKey();
    
            }