【问题标题】:How to enable cors in ASP.NET Core 6.0 Web API project?如何在 ASP.NET Core 6.0 Web API 项目中启用 cors?
【发布时间】:2021-12-28 19:21:24
【问题描述】:

在我的 ASP.NET Core 6.0 Web API 项目中配置 CORS。但预检请求收到 http 405 错误。

换句话说,HTTP OPTION 是不允许的。好像没有启用 cors。

我见过config.EnableCors(); 的示例,但此项目模板中没有App_Start/WebApiConfig.cs

我在这里错过了什么?

程序.cs

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.

builder.Services.AddControllers();

// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var devCorsPolicy = "devCorsPolicy";
builder.Services.AddCors(options =>
{
    options.AddPolicy(devCorsPolicy, builder => {
        //builder.WithOrigins("http://localhost:800").AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader();
        builder.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader();
        //builder.SetIsOriginAllowed(origin => new Uri(origin).Host == "localhost");
        //builder.SetIsOriginAllowed(origin => true);
    });
});


var app = builder.Build();

if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
    app.UseCors(devCorsPolicy);
}
else 
{
    app.UseHttpsRedirection();
    app.UseAuthorization();
    //app.UseCors(prodCorsPolicy);
}

app.MapControllers();

app.Run();

【问题讨论】:

  • 顺便说一句,app.UseCors(devCorsPolicy); 线路正在被击中。
  • 确定这是在 .NET Core 2.2 上吗?代码看起来更像 .NET (Core) 6.0 中包含的“简化”模板 ....
  • .NET 6 上的 web api 版本
  • 你在哪里得到 CORS 错误?在浏览器中还是在招摇中?
  • 感谢@marc_s 的编辑

标签: c# cors asp.net-core-webapi asp.net-core-6.0


【解决方案1】:

添加服务builder.Services.AddCors 和应用添加app.UseCors("corsapp");

builder.WithOrigins("*") 替换为builder.WithOrigins("http://localhost:800", "https://misite.com");

检查documentation

     var builder = WebApplication.CreateBuilder(args);

    
    // Add services to the container.
    
    builder.Services.AddControllers();
    
    // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
    builder.Services.AddEndpointsApiExplorer();
    builder.Services.AddSwaggerGen();
    //services cors
    builder.Services.AddCors(p => p.AddPolicy("corsapp", builder =>
    {
        builder.WithOrigins("*").AllowAnyMethod().AllowAnyHeader();
    }));
    
    var app = builder.Build();
    
    if (app.Environment.IsDevelopment())
    {
        app.UseSwagger();
        app.UseSwaggerUI();
        
    }
       //app cors
        app.UseCors("corsapp");
        app.UseHttpsRedirection();
        app.UseAuthorization();
        //app.UseCors(prodCorsPolicy);
    
    
    
    app.MapControllers();
    
    app.Run();

【讨论】:

    【解决方案2】:

    您发布的代码似乎运行良好。我将代码粘贴到一个新的 .NET 6 项目中,当从浏览器发送如下请求时,CORS 标头会添加到响应中。

    fetch('http://localhost:7107/Weatherforecast').then(res => res.json()).then(e => console.log(e))
    

    导致以下响应:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-11
      • 2021-09-30
      • 2017-05-03
      • 2017-11-22
      • 2015-11-03
      • 2017-06-18
      • 2022-07-07
      • 2021-12-30
      相关资源
      最近更新 更多