【问题标题】:.NET 5 Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.NET 5 对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头
【发布时间】: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) 请求会很有帮助你正在做的。

标签: c# .net .net-core cors .net-5


【解决方案1】:

删除:

.AllowCredentials();

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


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

【讨论】:

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

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

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

【讨论】:

    猜你喜欢
    • 2016-02-23
    • 2018-05-06
    • 1970-01-01
    • 2017-11-11
    • 2017-04-09
    • 2017-09-08
    • 2017-10-10
    • 2016-12-24
    相关资源
    最近更新 更多