Tôi không chắc mình đang thiếu gì, nhưng dường như không thể khiến Chính sách CORS của tôi hoạt động với .NET Core 3.1 và phía máy khách Angular 8.
Startup.cs
:
public void ConfigureServices(IServiceCollection services)
{
// ...
// Add CORS policy
services.AddCors(options =>
{
options.AddPolicy("foo",
builder =>
{
// Not a permanent solution, but just trying to isolate the problem
builder.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader();
});
});
services.AddControllers();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseHttpsRedirection();
// Use the CORS policy
app.UseCors("foo");
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
Thông báo lỗi Phía máy khách:
Access to XMLHttpRequest at 'https://localhost:8082/api/auth/' from origin 'http://localhost:4200' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
CẬP NHẬT:
Mặc dù tôi đã cấu hình CORS không chính xác (và câu trả lời được chấp nhận dưới đây thực tế đã giúp với điều đó) nhưng gốc rễ của vấn đề không liên quan. Đối với ngữ cảnh bổ sung, ứng dụng đã hoạt động hoàn toàn tốt khi chạy ứng dụng API và Angular bằng CLI - Tôi chỉ gặp vấn đề này sau khi triển khai cả hai lên máy chủ web.
Vấn đề "thực tế" cuối cùng có liên quan đến kết nối SQL, mà tôi chỉ phát hiện ra sau khi thêm ghi nhật ký lỗi tệp phẳng vào API và chạy theo dõi SQL Server để thấy rằng ứng dụng hoàn toàn không thể kết nối với SQL.
Tôi thường mong đợi điều này sẽ trả về 500 và tôi sẽ nhận ra vấn đề trong vòng 10 giây - tuy nhiên cấu hình sai của CORS có nghĩa là 500 không bao giờ thực sự được trả về vì phần mềm trung gian CORS thất bại trước tiên. Điều này là vô cùng bực bội để nói rằng ít nhất là tuyệt đối! . Tuy nhiên tôi muốn nói thêm rằng ở đây trong trường hợp những người khác thấy mình trong tình huống này, vì tôi đã "đuổi nhầm con thỏ", nếu bạn muốn. Sau khi sửa cấu hình CORS, tôi nhận ra vấn đề thực tế hoàn toàn không liên quan đến CORS.
TL; DR; - Đôi khi các lỗi phía máy chủ "Không phải CORS" có thể được trả về là lỗi CORS nếu chính sách CORS không được đặt chính xác
Người giới thiệu:
https://medium.com/swlh/cors-headers-with-dot-net-core-3-5c9dfc664785
app.UseCors("foo");
trướcapp.UseHttpsRedirection();