I was recently trying to send a message from my application (an Azure Function) to a Teams channel.
The current recommended way (by Microsoft) to do this is via a “Teams Workflow”, which is layer over top of Microsoft Power Automate, which is a layer over Logic apps.
Here’s my Teams Workflow:
Image may be NSFW.
Clik here to view.
Here’s the same Teams Workflow in Power Automate:
Image may be NSFW.
Clik here to view.
Here’s a slightly different one, which I wrote as an Azure Logic App. Here the first step is “When a HTTP request is received”:
Image may be NSFW.
Clik here to view.
In both cases, I was able to trigger the Power Automate / Logic app fine from Postman, but when I tried from C# code using HttpClient.PostJsonAsync it failed.
The only difference I could see between the Postman request and the HttpClient request was that HttpClient was sending a transfer-encoding=chunked header.
I re-wrote my code to use PostAsync instead, and then it worked fine.
using HttpClient client = new(); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); var card = AdaptiveCard.ExceptionCard("parcel.changed.v1", "I800100081376", "dev", new InvalidOperationException()); var url = "https://prod-31.australiasoutheast.logic.azure.com:443/workflows/dda945b5337d48...."; // await client.PostAsJsonAsync(url, card); // this sends a transfer-encoding=chunked header, which Power Automate & Logic Apps doesn't handle var json = JsonSerializer.Serialize(card); var content = new StringContent(json, System.Text.Encoding.UTF8, "application/json"); await client.PostAsync(url, content);