.Net Core 跨來源資源共用 (CORS) 設定,以下使用 React 前端網頁,呼叫.Net Core 後端API為例。
項目 | URL |
React 前端網頁 | http://localhost:3000 |
.Net Core 後端 API | https://localhost:44366/weatherforecast |
雖然同為本機 localhost ,但由於 React 前端網頁 Port:3000 與 .Net Core 後端 API Port:44366不同,因此發生了CORS 的問題,可透過以下步驟解決此問題。
1. 在 React 前端網頁出現了以下的錯誤訊息
2. 於 .Net Core 專案 Startup.cs 中補上以下兩段程式碼,即可解決此問題
2.1. 於 ConfigureServices 方法中補上 AddCors 方法,如下:
services.AddCors(options =>
{
// CorsPolicy 是自訂的 Policy 名稱
options.AddPolicy("CorsPolicy", policy =>
{
policy.AllowAnyOrigin()
.AllowAnyHeader()
.AllowAnyMethod();
//.AllowCredentials();
});
});
完整程式碼如下:
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddCors(options =>
{
// CorsPolicy 是自訂的 Policy 名稱
options.AddPolicy("CorsPolicy", policy =>
{
policy.AllowAnyOrigin()
.AllowAnyHeader()
.AllowAnyMethod();
//.AllowCredentials();
});
});
}
2.2. 於 Configure 方法中補上 UseCors 方法,如下:
app.UseCors("CorsPolicy");
完整程式碼如下:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.UseCors("CorsPolicy");
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
按照以上兩段程式碼即可排除 CORS 問題。
參考資料:
Mozilla CORS 說明