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

C# API遭CORS策略拦截:PUT/DELETE请求失败求助

问题分析与解决方案

问题现象

React前端调用C#后端API时,GET、POST请求可正常执行,但PUT、DELETE请求触发CORS错误:

Access to XMLHttpRequest at 'http://myBackEndDomain.example.com/resourcePath' from origin 'http://localhost:3000' has been blocked by CORS policy: Method PUT is not allowed by Access-Control-Allow-Methods in preflight response。

当前C# API的CORS配置代码如下:

//Cors
builder.Services.AddCors(options =>
{
    options.AddPolicy("_corsPolicy",
                          policy =>
                          {
                              policy.WithOrigins("http://localhost:3000")
                                    .AllowAnyHeader()
                                    .AllowAnyMethod()
                                    .AllowCredentials();
                          });
});

var app = builder.Build();

// Configure the HTTP request pipeline.

app.UseHttpsRedirection();

app.UseStaticFiles();

app.UseCors("_corsPolicy");
app.UseAuthentication();
app.UseAuthorization();
app.MapControllers();
app.Run();

补充信息:API在Postman中可正常调用,浏览器禁用CORS扩展后也能正常运行,问题锁定在服务端CORS配置环节。


可能的解决方案

1. 显式指定允许的HTTP方法

虽然配置中使用了AllowAnyMethod(),但部分场景下预请求(OPTIONS)的响应可能未正确包含PUT/DELETE方法。尝试替换为显式声明所有需要的方法:

policy.WithOrigins("http://localhost:3000")
      .AllowAnyHeader()
      .WithMethods("GET", "POST", "PUT", "DELETE") // 显式指定支持的方法
      .AllowCredentials();

2. 确认CORS策略全局生效

如果未在控制器或Action上添加[EnableCors("_corsPolicy")]属性,全局的CORS策略可能未正确应用到对应的API端点。可以在控制器类上绑定该策略:

[ApiController]
[Route("api/[controller]")]
[EnableCors("_corsPolicy")] // 绑定指定CORS策略
public class YourController : ControllerBase
{
    // 控制器业务逻辑
}

3. 检查HttpsRedirection的干扰

UseHttpsRedirection()会将HTTP请求重定向到HTTPS,而浏览器的CORS预请求(OPTIONS)不支持重定向,可能导致验证失败。可以临时注释该中间件测试,或确保前端请求的是后端的HTTPS地址:

// app.UseHttpsRedirection(); // 临时注释以排查问题

4. 验证预请求的响应头

使用浏览器开发者工具(F12)查看PUT/DELETE请求对应的OPTIONS预请求响应头,确认Access-Control-Allow-Methods字段是否包含PUT、DELETE。如果未包含,说明CORS策略未正确生效,需检查中间件顺序或策略配置是否有误。

5. 排查策略冲突

检查是否存在多个AddPolicy定义的CORS策略,或控制器/Action上是否存在[DisableCors]属性,这些都可能导致当前策略失效。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 15:27:27