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
相关产品推荐
相关产品推荐

