[英]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.