Why does a request to a conversation thread reply fail with a C# HttpClient, but the same call suceeds with curl or Graph Explorer?

David Senk 0 Reputation points
2024-01-17T17:28:52.8066667+00:00

I'm completely lost. I've resorted to just calling curl from C# as this is completely non-sensical to me. I started with using the Graph SDK, which I had multiple issues with, and I also received a "Not Found" error when trying to use graphClient.Groups[groupId].Threads[ThreadId].PostAsync(body) My current code looks like this:


var token =  await GetUserTokenAsync(); //gets the latest token from the GraphClient

using (var client = new HttpClient())
{
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
    using (var content = new StringContent(body))
    {
        content.Headers.ContentType = new MediaTypeHeaderValue("application/json");

        var postUrl = new UriBuilder($"https://graph.microsoft.com/v1.0/groups/{groupId}/threads/{threadId}/reply").ToString();

        var resp = await client.PostAsync(postUrl, content);

        if (!resp.IsSuccessStatusCode)
        {
            //same Url and body
            Console.WriteLine($"Error: Unable to post reply to group {groupId} thread {threadId}. The server said {await resp.Content.ReadAsStringAsync()}");
            String curlCommand = $"curl -i -X POST -H \"Authorization: Bearer {token}\" -H \"Content-Type: application/json\" -d '{body}' \"https://graph.microsoft.com/v1.0/groups/{groupId}/threads/{threadId}/reply\"";
            Console.WriteLine($"Try this with curl: {curlCommand}");
        }
    }
}

and when I run the generated curl command... it works? Exact same url, exact same token, exact same content type... but curl works, and HttpClient doesn't? What in the world am I missing?

Microsoft Graph
Microsoft Graph
A Microsoft programmability model that exposes REST APIs and client libraries to access data on Microsoft 365 services.
12,994 questions
{count} votes

Your answer

Answers can be marked as Accepted Answers by the question author, which helps users to know the answer solved the author's problem.