Я использую Web API и OWIN, и я пробовал каждое предлагаемое решение, но единственное, что сработало, было следующее
//use it in your startup class
app.Use((context, next) =>
{
if (context.Request.Headers.Any(k => k.Key.Contains("Origin")) && context.Request.Method == "OPTIONS")
{
context.Response.StatusCode = 200;
context.Response.Headers.Add("Access-Control-Allow-Origin", new string[1] { "ALLOWED_ORIGIN" });
context.Response.Headers.Add("Access-Control-Allow-Headers", new string[4] { "Origin", "X-Requested-With", "Content-Type", "Accept" });
context.Response.Headers.Add("Access-Control-Allow-Methods", new string[5] { "GET", "POST", "PUT", "DELETE", "OPTIONS" });
context.Response.Headers.Add("Access-Control-Allow-Credentials", new string[1] { "true" });
return context.Response.WriteAsync("");
}
return next.Invoke();
});
//this is important! Without it, it didn't work (probably because the middleware was too late)
app.UseStageMarker(PipelineStage.Authenticate);
, вам нужно вставить этот код где-нибудь в один из ваших классов запуска OWIN , Очень важно называть app.UseStageMarker(PipelineStage.Authenticate)
, потому что в противном случае проверка предполета закончилась неудачно. Дополнительная информация для UseStageMarker -> https://docs.microsoft.com/en-us/aspnet/aspnet/overview/owin-and-katana/owin-middleware-in-the-iis-integrated-pipeline
Также важно, чтобы вам нужно было явно определять разрешенные заголовки. Он будет терпеть неудачу, если вы используете *
в качестве заполнителя.
Возможно, это помогает кому-то.