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

Docker容器中运行的ASP.NET API仅拦截POST和PUT请求

问题分析与解决方案

核心原因

PUT、POST请求会触发预检OPTIONS请求,而GET、DELETE属于简单请求无需预检。你的CORS配置或中间件部署存在关键缺失,导致预检请求被拦截。

解决方案

1. 补充CORS策略的请求头允许规则

PUT/POST通常携带Content-Type等自定义头,需在策略中明确允许这些头通过预检:

builder.Services.AddCors(options =>
{
    options.AddPolicy(name: rardkAllowOrigins,
        policy =>
        {
            policy.WithOrigins("http://localhost:4200")
                .AllowAnyMethod()
                .AllowAnyHeader(); // 添加此行,允许所有请求头
        });
});

2. 修正CORS中间件的部署位置

UseCors必须放在路由初始化之后、授权中间件之前,否则无法拦截预检请求:

app.UseRouting();

// 关键:CORS中间件位置不能错,要在路由之后、授权之前
app.UseCors(rardkAllowOrigins);

app.UseAuthorization();

app.MapControllers();

3. 排查HTTPS混合内容问题

你的容器映射了443端口,若API强制HTTPS但前端用HTTP(localhost:4200),会触发浏览器的混合内容拦截:

  • 临时注释app.UseHttpsRedirection();测试是否解决问题
  • 若需保留HTTPS,需将前端也切换为HTTPS,或调整CORS策略支持跨协议请求

4. 显式在控制器启用CORS(可选)

若全局中间件未生效,可在目标控制器或Action上添加特性强制启用:

[EnableCors("rardkAllowOrigins")]
[ApiController]
[Route("api/[controller]")]
public class YourController : ControllerBase
{
    // 控制器逻辑
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 18:22:18