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

Blazor项目部署后POST请求触发CORS跨域问题求助

解决方案

1. 修正中间件顺序(核心问题)

你的代码存在**重复调用UseHttpsRedirection**的问题,且UseCors的执行位置不符合ASP.NET Core中间件的规则。CORS策略必须在UseAuthorization和MapControllers之前生效,且UseHttpsRedirection只需调用一次。

修改后的Program.cs关键片段:

var app = builder.Build();

// 仅保留一次HTTPS重定向
app.UseHttpsRedirection();

app.UseSwagger();
app.UseSwaggerUI();

// CORS必须在授权和路由映射之前执行
app.UseCors(specificOrigins);

app.UseAuthorization();

app.MapControllers();

app.Run();

2. 验证Origin匹配精度

检查WithOrigins("https://test2")中的地址是否与实际请求的Origin完全一致:

  • 不要添加尾部斜杠(https://test2/与https://test2会被视为不同Origin)
  • 若需支持动态匹配(如子域名),可替换为灵活规则:
    policy.SetIsOriginAllowed(origin => 
        origin.Equals("https://test2", StringComparison.OrdinalIgnoreCase))
    

3. 确保预检请求(OPTIONS)被处理

POST请求若携带自定义头或非标准Content-Type(如application/json),会触发浏览器的OPTIONS预检请求。你的AllowAnyMethod()已包含OPTIONS,但需保证UseCors在请求处理前执行(步骤1已修正)。

4. 显式在控制器上启用CORS

如果全局策略未生效,可在控制器或特定端点上强制启用:

[ApiController]
[Route("[controller]")]
[EnableCors("AppOrigins")] // 添加该特性
public class YourController : ControllerBase
{
    [HttpPost]
    public IActionResult PostData([FromBody] YourModel model)
    {
        // 业务逻辑
    }
}

5. 排查服务器层面的拦截

部分Web服务器(如IIS、Nginx)自带的CORS配置会覆盖ASP.NET Core的设置:

  • 检查服务器是否额外配置了CORS响应头
  • 确认服务器未拦截OPTIONS请求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 01:04:59