Manognya
Manognya

Reputation: 37

POST request in Azure Graph API Batch is returning BadRequest error

I am trying to fetch groups using Azure Graph API Batch. GetMemberGroups is a post request. Sample code:

var groupRequest = graphServiceClient.Users[emailId].GetMemberGroups(false)
                    .Request()
                    .Header("Content-Type", "application/json");
groupRequest.Method = Microsoft.Graph.HttpMethods.POST;
var batchRequestContent = new BatchRequestContent();
var groupRequestId = batchRequestContent.AddBatchRequestStep(groupRequest);
var returnedResponse = await graphServiceClient.Batch.Request().PostAsync(batchRequestContent);

This is giving me a BadRequest error. Message: Write request id : xxxxxx-xxxx-xxxx-xxx-xxxxxxx does not contain Content-Type header or body. All other GET request works fine in the Batch. I am also explicitly sending the content type in the request header but still no luck.

Upvotes: 1

Views: 513

Answers (1)

user2250152
user2250152

Reputation: 20595

The issue is that AddBatchRequestStep(IBaseRequest request) ignores groupRequest.RequestBody and creates BatchRequestStep without body.

You need to use AddBatchRequestStep(HttpRequestMessage httpRequestMessage) and add content manually to HttpRequestMessage

var groupRequest = graphServiceClient.Users[emailId].GetMemberGroups(false)
                .Request();
groupRequest.Method = Microsoft.Graph.HttpMethods.POST;
// create Http request message
var requestMessage = groupRequest.GetHttpRequestMessage();
// add content
requestMessage.Content = new StringContent(JsonSerializer.Serialize(groupRequest.RequestBody), Encoding.UTF8, "application/json");

var batchRequestContent = new BatchRequestContent();
var groupRequestId = batchRequestContent.AddBatchRequestStep(requestMessage);
var returnedResponse = await graphServiceClient.Batch.Request().PostAsync(batchRequestContent);

Upvotes: 0

Related Questions