I requested Gmail Batch API to postman and received the results normally.
So, based on Postman, an error occurs when a call is made using the HTTP Client on .NET. Both access token and boundary are the same, but a 400 Bad Request occurs.
link : google-batch-guide
HttpClient httpClient = new HttpClient();
var uri = "https://www.googleapis.com/batch/gmail/v1";
var access_token = "[google access token]"; // my access token
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", access_token);
httpClient.DefaultRequestHeaders.Add("Host", "www.googleapis.com");
var multipartContent = new MultipartContent("mixed", "stackoverflow");
// request 1
var requestContent1 = new StringBuilder();
requestContent1.AppendLine("--stackoverflow");
requestContent1.AppendLine("Content-Type: application/http");
requestContent1.AppendLine();
requestContent1.AppendLine("GET /gmail/v1/users/me/messages/18ca8a5d1dc95d09?format=metadata");
var httpContent1 = new StringContent(requestContent1.ToString());
multipartContent.Add(httpContent1);
// request 2
var requestContent2 = new StringBuilder();
requestContent2.AppendLine("--stackoverflow");
requestContent2.AppendLine("Content-Type: application/http");
requestContent2.AppendLine();
requestContent2.AppendLine("GET /gmail/v1/users/me/messages/18c94521fefc62d3?format=metadata");
var httpContent2 = new StringContent(requestContent2.ToString());
multipartContent.Add(httpContent2);
// end 3
var requestContent3 = new StringBuilder();
requestContent3.AppendLine("--stackoverflow--");
var httpContent3 = new StringContent(requestContent3.ToString());
multipartContent.Add(httpContent3);
/*
--stackoverflow
Content-Type: application/http
GET /gmail/v1/users/me/messages/18ca8a5d1dc95d09?format=metadata
--stackoverflow
Content-Type: application/http
GET /gmail/v1/users/me/messages/18c94521fefc62d3?format=metadata
--stackoverflow--
*/
var result = await httpClient.PostAsync(uri, multipartContent);
using var reader = new StreamReader(await result.Content.ReadAsStreamAsync());
var json = await reader.ReadToEndAsync();
Console.WriteLine(json);
response message
{
"error": {
"code": 400,
"message": "Failed to parse batch request, error: Failed in parsing HTTP headers: (1 bytes redacted). Received batch body: (0) bytes redacted",
"status": "INVALID_ARGUMENT"
}
}
No other attempt was made because the error message was not clear.