Partager via

Problem on API linked to API via APIM, GET methods are OK but POST methods are not forwarded to the backend

Ludovic LABBE 0 Points de réputation
2025-03-19T12:44:48.5366667+00:00

Context :

Using Azure SWA (Static Web App) with 2 environments Production (branch main) and Staging (branch staging).

On the Staging Env, i have linked an API with API Management (APIM).

in APIM, i have 2 different backends (both are Azure functions)

Observable results :

Considering custom domain of the SWA is https://mydomain

When the front call a GET endpoint ex : GET https://mydomain/api/get-something, everything works fine and i have my Json response.

When the front calls a POST endpoint ex : POST https://mydomain/api/post-something, i only have a response HTTP OK 200 without json response. On my monitoring i can see that the request doesn't reach the backend.

But when i do the same request via POSTMAN : POST https://mydomain/api/post-something i have a correct answer (HTTP 201 Created response with a json).

Question :
What am I doing wrong ?

I have tested each API call (GET and POST Methods) directly from Azure and Postman :

  • at the Azure function level
  • at the API level in APIM

All tests were OK and i had the expected answer from the API.
The problem only occurs when the POST request is sent by the browser.

Thank you for your help.

Azure
Azure

Plateforme et infrastructure de cloud computing pour la génération, le déploiement et la gestion d’applications et de services à travers un réseau mondial de centres de données gérés par Microsoft.

0 commentaires Aucun commentaire

1 réponse

  1. Suresh Chikkam 2,230 Points de réputation Personnel externe Microsoft Modérateur
    2025-03-20T07:15:39.3833333+00:00

    Salut @Ludovic LABBE ,

    Les navigateurs appliquent les politiques CORS, tandis que Postman ne le fait pas. Une réponse 200 OK avec un corps vide indique que le navigateur bloque la requête, mais que APIM répond toujours.

    • Activez CORS sur votre Azure Function et APIM. Veuillez consulter ce lien.

    enter image description here

    Politique APIM pour CORS (à ajouter dans la politique Inbound) :

    <inbound>
        <base />
        <cors allow-credentials="true">
            <allowed-origins>
                <origin>https://mon-domaine</origin>
            </allowed-origins>
            <allowed-methods>
                <method>GET</method>
                <method>POST</method>
                <method>OPTIONS</method>
            </allowed-methods>
            <allowed-headers>
                <header>*</header>
            </allowed-headers>
        </cors>
    </inbound>
    

    Activez la traçabilité APIM et vérifiez si le corps est présent :

    <inbound>
        <base />
        <set-body template="@(context.Request.Body.As<string>())" />
    </inbound>
    

    Je traduis les réponses de l’anglais, donc veuillez excuser d’éventuelles erreurs grammaticales.

    J’espère que cela aide !


    N'oubliez pas de cliquer sur "Accepter la réponse" et Oui si l'information fournie vous a aidé. Cela peut être bénéfique pour d'autres membres de la communauté.

    Image de l’utilisateur

    Si vous avez d'autres questions ou si vous rencontrez encore des problèmes, n'hésitez pas à me le faire savoir dans les "commentaires", je serai ravi de vous aider.

    Cette réponse a-t-elle été utile ?


Votre réponse

Les réponses peuvent être marquées comme « Acceptées » par l’auteur de la question et « Recommandées » par les modérateurs, ce qui aide les utilisateurs à savoir que la réponse a résolu le problème de l’auteur.