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

ASP.NET Core中OPTIONS请求405错误引发CORS策略拦截问题

解决CORS拦截与OPTIONS请求405错误问题

从错误信息UnsupportedApiVersion可以看出,核心问题不在于CORS配置本身,而是API版本控制与OPTIONS请求的路由匹配失败,导致请求被拦截后返回405。以下是针对性的解决步骤:

1. 匹配API版本配置

如果你的InboundAction控制器启用了API版本控制(比如带有[ApiVersion("x.x")]属性),必须给新增的OPTIONS端点添加相同的版本标识,确保路由能匹配:

[ApiVersion("1.0")] // 替换为你实际使用的版本号
[HttpOptions]
[AllowAnonymous]
public IActionResult Options()
{
    return Ok();
}

同时检查控制器的路由模板,如果是带版本参数的(如[Route("api/v{version:apiVersion}/InboundAction")]),发起OPTIONS请求时URL要包含版本号,或者调整路由规则让OPTIONS请求无需版本也能匹配。

2. 改用ASP.NET Core全局CORS中间件

放弃web.config的静态头配置,改用ASP.NET Core原生的CORS中间件,能更精准地处理预检请求:

  • 在Program.cs中添加CORS服务配置:
builder.Services.AddCors(options =>
{
    options.AddPolicy("AllowAll", policy =>
    {
        policy.AllowAnyOrigin()
              .AllowAnyMethod()
              .AllowAnyHeader();
        // 或者更严格的配置:
        // policy.WithOrigins("你的前端域名")
        //       .WithMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
        //       .WithHeaders("content-type", "iac-version", "license");
    });
});
  • 在管道中启用CORS(放在UseRouting之后,UseAuthorization之前):
app.UseCors("AllowAll");

3. 禁用不必要的API版本控制

如果你的API不需要版本管理,检查是否误启用了相关服务,在Program.cs中移除API版本控制的配置代码,比如:

// 移除类似下面的代码
builder.Services.AddApiVersioning(options =>
{
    options.ReportApiVersions = true;
    options.AssumeDefaultVersionWhenUnspecified = true;
});

4. 验证OPTIONS请求路由

确保OPTIONS请求的URL完全匹配控制器的路由,比如如果控制器路由是[Route("api/InboundAction")],那么OPTIONS请求的URL必须是https://***/api/InboundAction,没有多余的路径或参数。

完成以上配置后,重新部署服务,用Postman测试OPTIONS请求,确认返回200状态码后,再测试前端AJAX调用即可解决CORS拦截问题。

内容的提问来源于stack exchange,提问作者Code-Monkey-Armis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 16:01:00