Forum Discussion
daveParso
9 years agoFrequent Visitor
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; }
}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_ZhangMicrosoft Employee
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(); }