无法在.net core 3.1 web api中找出CORS
Posted
技术标签:
【中文标题】无法在.net core 3.1 web api中找出CORS【英文标题】:Cannot figure out CORS in .net core 3.1 web api 【发布时间】:2020-08-27 14:34:52 【问题描述】:我已尝试将所有方法调用移动不少于 10,000 次。我需要尝试第 10,001 次才能成为获胜者! 我做错了什么?
我不断收到与 CORS 相关的错误,但我已按照指南尝试解决它。
public void ConfigureServices(IServiceCollection services)
services.AddCors(options =>
options.AddDefaultPolicy(
builder =>
builder.WithOrigins("http://localhost:3000").AllowAnyHeader().AllowAnyMethod();
);
);
//services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_3_0);
services.AddControllers();
services.AddAuthentication(IISDefaults.AuthenticationScheme);
services.AddSwaggerGen();
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
if (env.IsDevelopment())
app.UseDeveloperExceptionPage();
app.UseSwagger();
app.UseSwaggerUI(c =>
c.SwaggerEndpoint("/swagger/v1/swagger.json", "MES vs API");
);
app.UseHttpsRedirection();
app.UseRouting();
app.UseCors("AllowAnyOrigin");
app.UseAuthorization();
app.UseEndpoints(endpoints =>
endpoints.MapControllers();
);
在反应中,我有这个:
fetch('http://localhost:44387/api/Users/GetTest').then(function (response)
this.state.user = response.text();
);
【问题讨论】:
我已经设法让客户端上的 API 调用保持在(待定)状态。所以有…………那个…… 请在您的 React 应用中打开开发控制台并检查控制台“网络”选项卡下的 HTTP 调用。在特定调用中,响应标头中存在“Access-Control-Allow-Origin”标头? 直到我在 Startup.cs 中搞砸了——导致我发布了代码。现在它一直处于挂起状态,然后最终失败,并在 F12 中出现 CONNECTION_RESET 错误。这需要几分钟时间。app.UseHttpsRedirection();
把它移过来
把它移过来?去哪里?
【参考方案1】:
您正在发出 http 请求,但您启用了 HttpsRedirection。
如果您在没有 https 的情况下进行开发,您应该将 app.UseHttpsRedirection();
调用移动到仅在生产中运行的代码块中。例如
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
if (env.IsDevelopment())
app.UseDeveloperExceptionPage();
else // Production
app.UseHttpsRedirection();
app.UseSwagger();
app.UseSwaggerUI(c =>
c.SwaggerEndpoint("/swagger/v1/swagger.json", "MES vs API");
);
app.UseRouting();
app.UseCors(); // Use default policy as defined in example code
//...
您还添加了默认的 CORS 策略,但是当您调用 UseCors()
时,您使用的是命名策略 (AllowAnyOrigin)。
要么定义一个命名策略“AllowAnyOrigin”,要么直接调用app.UseCors();
来使用默认策略。
Documentation on CORS in .net core
【讨论】:
这是否改变了它可以在 http 和 https 模式下工作? @MuhammetCaylak 正在开发 http 和 https(如果安装了证书)。在生产中它只会使用 https【参考方案2】:你可以试试这样用吗?
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
if (env.IsDevelopment())
app.UseDeveloperExceptionPage();
app.UseCors("AllowAnyOrigin");
app.UseSwagger();
app.UseSwaggerUI(c =>
c.SwaggerEndpoint("/swagger/v1/swagger.json", "MES vs API");
);
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
endpoints.MapControllers();
);
【讨论】:
【参考方案3】:我在设置 CORS 策略时将它用于依赖注入容器
//CORS CONFIGURATION
services.AddCors(options =>
options.AddPolicy("CorsPolicy",
builder => builder.SetIsOriginAllowed(_ => true)
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials());
);
然后应用 CORS 政策
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
if (env.IsDevelopment())
app.UseDeveloperExceptionPage();
app.UseRouting();
//ALLOW CORS
app.UseCors("CorsPolicy");
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
endpoints.MapControllers();
);
【讨论】:
以上是关于无法在.net core 3.1 web api中找出CORS的主要内容,如果未能解决你的问题,请参考以下文章
在 .Net Core 3.1 的 Web Api 中无法使用 Cors [重复]
C# 和 Docker - 无法从容器化 .NET Core 3.1 Web API 连接到容器化 MySQL 服务器
ASP.NET Core 3.1 Web Api HttpPost Action 参数无法接收 axios application/json HttpPost 传递数据
如何将 .net core Web API 项目添加到现有的 .NET core (3.1) Web Application 项目中?
NET Core 3.1 MVC 授权/身份验证,带有在单独的 Net Core 3.1 Web Api 中从外部获取的令牌 (JWT)