3 つの異なる SPA によって呼び出されている ASP.NET Web API があります。Web API に Windows 認証を使用しています。最初に、次のように Web.config で CORS を構成しようとしました。
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="http://localhost:63342" />
<add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE" />
<add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, Accept" />
<add name="Access-Control-Allow-Credentials" value="true" />
</customHeaders>
</httpProtocol>
これにより、このプリフライトの問題が発生しました。
Response to preflight request doesn’t pass access control check: No ‘Access-Control-Allow-Origin’ header is present on the requested resource. Origin (...) is therefore not allowed access.
Global.asax.cs に次のメソッドを追加して解決しました。
protected void Application_BeginRequest()
{
if (Request.Headers.AllKeys.Contains("Origin") && Request.HttpMethod == "OPTIONS")
{
Response.Flush();
}
}
このアプローチは、単一の SPA に対して完全に機能しました。Web.config に移動して、次のように他のオリジンを追加できると思いました。
<add name="Access-Control-Allow-Origin" value="http://localhost:63342,http://localhost:63347,http://localhost:63345/>
しかし、明らかにそれは許可されていません。これにより、次のエラーが発生しました。
The 'Access-Control-Allow-Origin' header contains multiple values (...), but only one is allowed. Origin (...) is therefore not allowed access.
したがって、これを修正するために、アプローチを変更し、代わりに、Register メソッドで、次のように WebAPIConfig.cs で CORS を構成することにしました。
var cors = new EnableCorsAttribute("http://localhost:63342,http://localhost:63347,http://localhost:63345", "Origin, X-Requested-With, Content-Type, Accept", "GET, POST, PUT, DELETE");
cors.SupportsCredentials = true;
config.EnableCors(cors);
これでうまくいくと思っていましたが、PUT および DELETE リクエストを使用すると再びプリフライト エラーが発生し、これを修正する方法がわかりません。Application_BeginRequest メソッドをデバッグしましたが、まだ OPTIONS リクエストをフラッシュしているため、このエラーの原因がわかりません。この問題を解決する方法を知っている人はいますか?
編集:
プリフライト エラーの出力: