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

.NET 6 API HTTP重定向返回302而非307,POST转GET问题

解决HTTP POST请求/token时302重定向转GET的问题

问题核心差异

同样配置了app.UseHttpsRedirection()和app.UseHSTS(),原API对POST请求返回307(临时重定向,保留原请求方法),新API却返回302(临时重定向,自动转为GET),导致后续请求因方法不匹配返回405。

排查与解决步骤

1. 检查全局HTTPS重定向状态码配置

ASP.NET Core默认会根据请求方法自动选择重定向状态码:非GET请求返回307,GET请求返回302。如果新API显式指定了RedirectStatusCode为302,会强制所有重定向使用该状态码,导致POST请求被转为GET:

// 错误配置示例,需移除
app.UseHttpsRedirection(options =>
{
    options.RedirectStatusCode = StatusCodes.Status302Found;
});

解决:删除自定义的RedirectStatusCode设置,让框架自动适配请求方法。

2. 确认中间件顺序

中间件执行顺序错误可能导致重定向逻辑异常,确保UseHttpsRedirection()的位置符合规范:

var builder = WebApplication.CreateBuilder(args);

// 注册服务
builder.Services.AddControllers();
builder.Services.AddSwaggerGen();

var app = builder.Build();

// 中间件顺序:HSTS → HTTPS重定向 → Swagger → 授权 → 路由
app.UseHsts();
app.UseHttpsRedirection();

if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseAuthorization();

app.MapControllers();

app.Run();

3. 排查/token端点的特殊配置

如果/token端点有自定义路由约束、HTTPS强制规则,或使用了第三方认证中间件(如IdentityServer),可能存在重定向逻辑冲突:

  • 检查端点是否显式设置了RequireHttpsMetadata或类似强制HTTPS的属性
  • 确认认证中间件的重定向配置未覆盖全局HTTPS重定向规则

4. 验证服务器代理配置

若新API部署在反向代理/负载均衡之后,代理服务器可能修改了响应状态码,将307替换为302。需确认代理配置保留了ASP.NET Core返回的原始状态码。

快速验证方法

在新API中添加测试端点,验证全局重定向行为:

[HttpPost("test-redirect")]
public IActionResult TestRedirect()
{
    return Ok("Success");
}

访问http://recordsapps-dev.calfee.com/test-redirect:

  • 若返回307,说明问题出在/token端点的特殊配置
  • 若返回302,说明全局HTTPS重定向配置存在问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 16:37:45