You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Azure API Management中POST application/x-www-form-urlencoded格式请求

Azure APIM 发送 application/x-www-form-urlencoded 格式POST请求解决方案

核心问题为APIM默认不会自动处理请求体到form-urlencoded格式的转换,可通过以下方式配置实现:

方式一:通过入站策略自动转换(推荐)

适用于调用方传入JSON格式请求,由APIM自动转换为后端要求的form格式:

  1. 进入APIM实例,选择目标API的对应操作,打开策略编辑器
  2. 在inbound节点添加如下配置:
<inbound>
    <base />
    <!-- 强制覆盖请求头为指定Content-Type -->
    <set-header name="Content-Type" exists-action="override">
        <value>application/x-www-form-urlencoded</value>
    </set-header>
    <!-- 转换JSON请求体为form-urlencoded格式 -->
    <set-body>@{
        var reqBody = context.Request.Body.As<JObject>();
        string token = reqBody["token"].ToString();
        string enrollDevice = reqBody["enrollDevice"].ToString().ToLower();
        // 对参数做URL编码后拼接为form格式
        return $"token={Uri.EscapeDataString(token)}&enrollDevice={Uri.EscapeDataString(enrollDevice)}";
    }</set-body>
</inbound>

如果后端要求接收的是整个JSON作为form的单个参数值,将set-body内的返回值替换为:

return $"={Uri.EscapeDataString(context.Request.Body.As<string>())}";

方式二:直接在APIM测试面板发起请求

无需配置策略,手动构造符合要求的请求即可:

  • 请求头添加Content-Type,值为application/x-www-form-urlencoded
  • 请求体按form格式填写,示例:token=abc123&enrollDevice=true,所有特殊字符需提前做URL编码

验证技巧:在Postman中打开对应请求的代码生成功能,选择cURL格式,即可看到Postman实际发出的完整请求头和请求体内容,和APIM的转发请求对比保持完全一致即可解决报错。

排查手段

如果配置后仍然报错,开启APIM测试面板的跟踪功能,查看请求转发到后端阶段的实际请求内容,确认和Postman请求无差异即可。

内容的提问来源于stack exchange,提问作者MoskiMeruna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 10:36:03