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

ASP.NET 6 Core Web API部署Azure后POST请求返回GET结果异常

问题现象
  • 向ASP.NET 6 Core Web API发送POST请求时出现异常行为,测试场景已简化为最小复现版本,仅保留简单的GET、POST两个控制器方法
  • 本地开发环境下,通过Postman向API发送GET、POST请求均可返回正确结果
  • API部署到Azure后发送POST请求时,Postman返回的是GET请求的结果,不符合POST接口的预期返回值
  • Postman日志控制台显示,POST请求发出后会立刻触发一个GET请求,该现象在使用IIS Express的本地开发环境中不会出现
  • 本次测试的控制器发布地址:https://api2.matiasmasso.es/test
复现代码
using Microsoft.AspNetCore.Mvc;

namespace Api.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class TestController : ControllerBase
    {
        [HttpPost()]
        public IActionResult Post()
        {
            IActionResult retval = Ok("Success on Post!");
            return retval;
        }

        [HttpGet()]
        public IActionResult Get()
        {
            IActionResult retval = Ok("Success on Get!");
            return retval;
        }
    }
}
问题根因

该现象是POST请求触发3xx重定向后,HTTP客户端默认将重定向请求改为GET方法导致的:

  1. 部署到Azure后,站点默认存在URL重写规则(自动追加尾部斜杠、HTTP强制跳HTTPS等),发送POST请求到/test时,服务端会先返回301/302重定向响应,要求跳转到/test/或者HTTPS地址
  2. Postman默认开启自动跟随重定向,按照HTTP旧规范实现逻辑,POST请求收到301/302响应时,会自动改用GET方法请求重定向后的地址,最终命中GET接口返回对应结果
  3. 本地IIS Express环境默认没有配置这类自动重定向规则,因此不会出现该问题
排查与解决方法
  • 先确认重定向行为:在Postman设置中临时关闭自动跟随重定向选项,重新发送POST请求,即可看到原始的3xx响应状态码和Location响应头,确认具体的重定向目标
  • 临时验证方案:发送POST请求时直接使用带尾部斜杠的地址https://api2.matiasmasso.es/test/,同时确保直接使用HTTPS协议发起请求,避开重定向规则即可正常得到POST接口返回
  • 永久修复方案1:如果是Azure App Service/IIS层面的URL重写规则导致自动加斜杠,前往Azure门户的应用服务配置中,删除对应的追加尾部斜杠重写规则
  • 永久修复方案2:如果是ASP.NET Core路由层自动追加尾部斜杠导致的跳转,在Program.cs中修改路由配置关闭该行为,参考代码:
builder.Services.Configure<RouteOptions>(options =>
{
    // 关闭自动追加尾部斜杠的重定向逻辑
    options.AppendTrailingSlash = false;
});
  • 永久修复方案3:如果已经在Azure前置了CDN、WAF或者Front Door做HTTPS卸载,直接关闭ASP.NET Core层的UseHttpsRedirection中间件,避免应用层重复做HTTPS跳转触发请求方法变更

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 05:27:48