私の理解では、それに応じてCORSを有効にすると、応答モデルに次のヘッダー情報を含める必要があります(すべてを許可したい場合)。
Access-Control-Allow-Origin: *
Access-Control-Allow-Method: *
Access-Control-Allow-Header: *
Startup
で有効にする:
public void ConfigureServices(IServiceCollection services)
{
//...
services.AddCors();
services.ConfigureCors(options =>
{
options.AddPolicy("AllowAll", p => p.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader().AllowCredentials());
});
//...
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
//...
app.UseCors("AllowAll");
//...
}
問題は、これらのヘッダーが返されないことであり、APIからリクエストしようとすると、次のエラーが発生します。
プリフライト要求への応答がアクセス制御チェックに合格しません:要求されたリソースに「Access-Control-Allow-Origin」ヘッダーがありません。したがって、オリジン ' http:// localhost 'はアクセスを許可されていません。
app.UseCors
メソッドのapp.UseMvc
の前にStartup.Configure
を追加してください。これは、MVCミドルウェアの前にCORSミドルウェアを適用する必要があるためです。
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
...
//Add CORS middleware before MVC
app.UseCors("AllowAll");
app.UseMvc(...);
}
それ以外の場合、リクエストはCORSミドルウェアが適用される前に終了します。これは、 UseMvc
が UseRouter
を呼び出し、最終的に RouterMiddleware
を追加するためです。このミドルウェアは、要求のルートハンドラーが見つからなかった場合にのみ、次に構成されたミドルウェアを実行します。