如何解决React对接ASP.NET Core Web API时出现的本地CORS跨域错误
问题根因
你的问题核心是Windows身份验证默认拦截了无凭证的CORS预检OPTIONS请求,导致请求根本没有走到你配置的CORS中间件,自然返回的响应头里没有Access-Control-Allow-Credentials: true,所以触发CORS报错。服务器端部署正常是因为服务器IIS已经做了对应配置,本地IIS Express/Kestrel默认没有适配这个场景。
解决方案
第一步:开启本地运行时的匿名身份验证
打开项目Properties文件夹下的launchSettings.json,修改iisExpress配置项,同时开启Windows认证和匿名认证:"iisExpress": { "windowsAuthentication": true, "anonymousAuthentication": true, "applicationUrl": "https://localhost:44376;http://localhost:5000", "sslPort": 44376 }第二步:配置授权策略,保证非OPTIONS请求必须通过身份验证
在Startup.cs的ConfigureServices方法中添加如下配置,避免匿名认证开启后接口被未授权访问:using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Server.IISIntegration; // 省略其他已有代码 public void ConfigureServices(IServiceCollection services) { // 原有DbContext、Scoped注入等代码保留 // 添加Windows身份验证 services.AddAuthentication(IISDefaults.AuthenticationScheme); // 配置全局授权策略:所有请求默认需要认证 services.AddAuthorization(options => { options.FallbackPolicy = new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .Build(); }); // 原有AddControllers、AddCors代码保留 }第三步:修正axios配置的笔误
你当前axios配置中Accept字段拼写错误,将applicaiton/json改为application/json,避免不必要的请求异常。可选:如果你使用Kestrel直接运行而非IIS Express,需要在构建Host时开启Windows认证,修改
Program.cs:public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>() // 开启Kestrel的Windows身份验证 .UseWindowsAuthentication(); });
你原有的CORS配置顺序(UseRouting→UseCors→UseAuthorization)是正确的,不需要调整。修改完成后重启本地API服务即可正常发起POST请求。
内容的提问来源于stack exchange,提问作者ataravati
相关产品推荐
相关产品推荐

