danielmacedo90
### Target Platforms Other ### SDK Version AdaptiveCards (3.1.0) ### Application Name Microsoft Teams ### Problem Description ## Description When an Adaptive Card contains an `Image` directly in the card body, Microsoft Teams correctly displays the image, and the native **"Download image"** action retrieves it using an HTTP `GET` request. However, when the same `Image` is placed inside a `CarouselPage`, the image itself still loads and displays correctly, but the native **"Download image"** action sends an HTTP `POST` request to the image URL instead of `GET`. Because the image endpoint does not support `POST`, the server responds with `405 Method Not Allowed`, and the image cannot be downloaded through the native Teams action. The issue is reproducible using the official Adaptive Cards Carousel sample, so it does not appear to be related to the application implementation or the image hosting service. ## Expected behavior The native **"Download image"** action should retrieve the image using HTTP `GET`, as it does for an `Image` directly in the Adaptive Card. The image should be downloadable through the native Teams action regardless of whether it is placed directly in the card body or inside a `CarouselPage`. ## Actual behavior The image renders correctly inside the `CarouselPage`. However, when right-clicking the image and selecting **"Download image"**, Teams sends a `POST` request instead of `GET`. The request is similar to: ```http POST https://picsum.photos/200/200?image=110&FileDownCorrId=<guid> Content-Type: application/x-www-form-urlencoded ``` The image server responds with: ```http 405 Method Not Allowed ``` The Network tab confirms that the request method is `POST` and the response status is `405 Method Not Allowed`. Therefore, the image can be displayed normally, but the native **"Download image"** action fails. ## Reproduction The issue can be reproduced using the official Carousel example from the Adaptive Cards documentation: https://adaptivecards.microsoft.com/?topic=Carousel The official sample renders the image correctly in Teams. However, when right-clicking the image and selecting **"Download image"**, Teams sends a `POST` request instead of `GET`, resulting in a `405 Method Not Allowed` response. The issue is also reproducible with the following minimal card: ```json { "type": "AdaptiveCard", "$schema": "https://adaptivecards.io/schemas/adaptive-card.json", "version": "1.5", "body": [ { "type": "Carousel", "pages": [ { "type": "CarouselPage", "items": [ { "type": "Image", "url": "https://picsum.photos/200/200?image=110" } ] } ] } ] } ``` ## Comparison **Image directly in the card:** `Image → Display → Download image → GET → 200 OK` **Image inside CarouselPage:** `Carousel → CarouselPage → Image → Display → Download image → POST → 405 Method Not Allowed` The important distinction is that the image itself is accessible and renders correctly in both cases. The failure occurs specifically when Teams attempts to download an image located inside a `CarouselPage`. The behavior has been reproduced with both Azure Blob Storage SAS URLs and public HTTPS image URLs. In both cases, the image loads successfully with a normal `GET` request. The failure only occurs when the native Teams **"Download image"** action sends a `POST` request. For Azure Blob Storage, the same SAS URL works correctly with `GET` and returns `200 OK`, while the Teams download action sends `POST` and Azure returns: ```text 405 The resource doesn't support specified Http Verb x-ms-error-code: UnsupportedHttpVerb ``` The issue is therefore reproducible independently of the image hosting service. ## Environment - Microsoft Teams Desktop - Teams client: `26246.1606.5149.6600` - Teams user agent: `Teams/26246.1606.5149.6600 (49)` - Microsoft Edge WebView2 / Chromium 153 - Adaptive Card schema version: `1.5` Could the Teams Adaptive Card renderer / image download handler be reviewed? Specifically: 1. Why does the native "Download image" action use `POST` when the Image is inside a `CarouselPage`? 2. Is this an expected limitation of `CarouselPage`, or is it a bug? 3. Is there a supported way to make the native Teams image download use `GET` for images inside `CarouselPage`? 4. Is there a recommended workaround that preserves the Carousel / CarouselPage structure? ### Screenshots **Screenshot 1:** Network tab showing the `POST` request to the image URL and the `405 Method Not Allowed` response. <img width="974" height="129" alt="Image" src="https://github.com/user-attachments/assets/7147d6c3-ccc7-4b52-9fd0-2de07f78d007" /> **Screenshot 2:** Console showing the `Sending form data...` message and the corresponding error. <img width="1904" height="97" alt="Image" src="https://github.com/user-attachments/assets/c9d6e132-21f4-482a-b333-f39adaf0ccf8" /> ### Card JSON ```JSON { "type": "AdaptiveCard", "$schema": "https://adaptivecards.io/schemas/adaptive-card.json", "version": "1.5", "body": [ { "type": "Carousel", "pages": [ { "type": "CarouselPage", "items": [ { "type": "Image", "url": "https://picsum.photos/200/200?image=110" } ] } ] } ] } ``` ### Sample Code Language JSON ### Sample Code No application-specific code is required to reproduce the issue. Send the JSON provided above as an Adaptive Card to Microsoft Teams, right-click the image inside the Carousel, select "Download image", and inspect the network request. The issue is also reproducible using the official Adaptive Cards Carousel sample: https://adaptivecards.microsoft.com/?topic=Carousel