何が欠けているのかはわかりませんが、.NET Core 3.1およびAngular 8クライアント側でCORSポリシーを機能させることができません。
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();
});
}
エラーメッセージクライアント側:
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.
更新:
CORSを正しく構成していませんでした(そして、以下の受け入れられた回答は実際にそれを助けました)問題の根本は無関係でした。追加のコンテキストとして、CLIを使用してAPIとAngularアプリを実行すると、アプリは完全に正常に動作していました-私は、両方をWebサーバーにデプロイした後にのみこの問題が発生していました。
「実際」の問題は、私が唯一のAPIにフラットファイルエラーログを追加し、アプリはすべてのSQLに接続することができなかったことを見つけるために、SQL Serverのトレースを実行した後に発見されたSQL接続に関連していることになりました。
通常、これは500を返すだけで、10秒以内に問題が発生すると思っていましたが、CORSの設定ミスにより、CORSミドルウェアが最初に失敗したため、500が実際に返されることはありませんでした。 これは絶対に控えめに言っても非常にイライラしました!。しかし、もし私が「間違ったうさぎを追いかけていた」ので、もしそうなら、他の人がこの状況に陥った場合に備えて、ここにそれを付け加えたいと思います。 CORS構成を修正した後、実際の問題はCORSとはまったく無関係であることに気付きました。
TL; DR; -CORSポリシーが正しく設定されていないと、「非CORS」の.NETサーバー側エラーがCORSエラーとして返されることがある
参照:
https://medium.com/swlh/cors-headers-with-dot-net-core-3-5c9dfc664785
app.UseCors("foo");
前に設定してみてくださいapp.UseHttpsRedirection();