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

