簡體   English   中英

從 .NET Core 3.1 升級到 .NET 6 后出現 CORS 錯誤

[英]CORS error after upgrade from .NET Core 3.1 to .NET 6

I recently upgraded a relatively large web API from .NET Core 3.1 to .NET 6 and am getting a no Access-Control-Allow-Origin header CORS error. 我還沒有轉移到最小托管 model,但我從文檔中了解到這不是必需的,舊的 model 應該繼續工作。 我在下面包含了來自啟動和程序的代碼,以及我必須更改哪些內容才能使升級后的項目正常工作。 請注意,其他一切正常。

啟動.cs

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<ForwardedHeadersOptions>(options =>
        {
            options.ForwardedHeaders =
                ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
        });
    services.AddCors(options => options.AddPolicy("CorsPolicy",
            builder =>
            {
                builder.AllowAnyMethod()
                    .WithOrigins(Configuration.GetSection("AllowedOrigins").Get<string[]>())
                    .SetIsOriginAllowed(origin => true)
                    .AllowAnyHeader();
            }));
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory, IHostApplicationLifetime appLifetime)
{
    app.UseCors("CorsPolicy");
}

請注意, *是從“AllowedOrigins”返回的。

程序.cs

private static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .UseSerilog()
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder
                    .UseKestrel()
                    .UseContentRoot(Directory.GetCurrentDirectory())
                    
                    .UseUrls(Configuration.GetValue<bool>("App:UsesHttps") 
                        ? $"{Configuration.GetValue<string>("App:HttpUrl")}, " +
                          $"{Configuration.GetValue<string>("App:HttpsUrl") }" 
                        : $"{Configuration.GetValue<string>("App:HttpUrl")}")
                    .UseStartup<Startup>();
            });

對於升級到 .NET 6, Startup.cs中沒有任何變化。 Program.cs中, .UseUrls不再起作用,而是我在 appsettings 中定義了它,並且我刪除了對.UseUrls的調用。

應用設置 (.NET Core 3.1)

"App": {
        "UsesHttps": false,
        "HttpUrl": "http://0.0.0.0:5005",
        "HttpsUrl": "https://0.0.0.0:5001"
    },

應用程序設置 (.NET 6)

"Kestrel": {
        "Endpoints": {
            "Http": {
                "Url": "http://localhost:5005"
            }
        }
    },

代碼中的其他內容都沒有改變,我所做的只是更新包。 我看不出它們會如何影響 CORS 錯誤。

該應用程序在 Nginx 后面的 Docker 容器中運行,用作反向代理。 我沒有對 Nginx 設置進行任何更改。 僅當 Nginx 處理 HTTPS 連接時,該應用才在 HTTP 上偵聽。 同樣,當應用程序針對 .NET Core 3.1 構建時,此方法有效。 我已閱讀有關升級到 .NET 6 的文檔,但我找不到任何可以解釋這種變化的東西。

不知道這是否會幫助你。 我們在 program.cs 中的 API 中有以下內容

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        // Other code left out here

        app.UseAuthentication();

        // Allow CORS for any origin, method or header
        app.UseCors(policy =>
                policy.AllowAnyOrigin()
                .AllowAnyMethod()
                .AllowAnyHeader());

        app.UseAuthorization();

     }

如果我沒記錯的話,事情的順序非常重要。 我在您的代碼中沒有看到身份驗證和授權。 不知道你是否需要。 這段代碼有一個注釋,因為它可能允許太多。 我們仍然需要對此進行調查。

對此有何更新? 從 .NET5 遷移到 .NET6 時我面臨同樣的問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM