.NET 5 对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头

Posted

技术标签:

【中文标题】.NET 5 对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头【英文标题】:.NET 5 Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource 【发布时间】:2021-05-28 09:29:52 【问题描述】:

我目前正在尝试在 .NET Core 5 API 上启用 CORS。非预检,跨域请求工作正常;但是,所有OPTIONS 请求都会导致上述消息。我的Startup.cs 看起来像这样:

public void ConfigureServices(IServiceCollection services)

  services.AddCors(options =>
  
    options.AddPolicy(corsPolicyName, builder =>
    
      builder
        .WithOrigins("http://localhost:3000")
        .AllowAnyHeader()
        .AllowAnyMethod()
        .AllowCredentials();
    );
  );
  ...


public void Configure(IApplicationBuilder app, IWebHostEnvironment env)

  app.UseHttpsRedirection();
  app.UseRouting();
  app.UseCors(corsPolicyName);
  app.UseAuthorization();
  app.UseEndpoints(endpoints =>
  
    endpoints.MapControllers();
  );

查看了其他几个线程后,我似乎无法弄清楚我的配置有什么问题。任何帮助将不胜感激。

【问题讨论】:

我知道你自己回答了这个问题,但是看看 a) 应该处理请求的控制器和 b) 请求会很有帮助你正在做的。 【参考方案1】:

删除:

.AllowCredentials();

并在 UseRouting 和 UseAuthorization 之间移动 app.UseCors(corsPolicyName):


  app.UseHttpsRedirection();
  app.UseRouting();
app.UseCors(corsPolicyName);
  app.UseAuthorization();

【讨论】:

不幸的是,这并没有解决我的问题。谢谢你的建议;我更新了我的示例以反映这一变化。【参考方案2】:

在我的 API 上启用匿名身份验证解决了这个问题。 OPTIONS 请求不包含凭据,因此不允许匿名身份验证导致它们被拒绝。

可以通过转到项目的属性>调试>选中“启用匿名身份验证”来启用匿名身份验证。

【讨论】:

以上是关于.NET 5 对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头的主要内容,如果未能解决你的问题,请参考以下文章

对预检请求的响应未通过访问控制检查 - Angular 5 + JWT OAuth

在 ASP.NET 中,对预检请求的响应未通过访问控制检查:没有“Access-Control-Allow-Origin”标头

来自 ASP NET Web API 的 CORS 阻止 Ajax POST 调用 - 对预检请求的响应未通过访问控制检查

“对预检请求的响应未通过访问控制检查”是啥意思?

对预检请求的响应未通过访问控制检查错误

React + ASP.Net Core 3:CORS 对预检请求的响应未通过访问控制检查:没有“Access-Control-Allow-Origin”标头