Контейнер StructureMap.MVC5, расположенный в фоновом режиме

Я использую 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

Также важно, чтобы вам нужно было явно определять разрешенные заголовки. Он будет терпеть неудачу, если вы используете * в качестве заполнителя.

Возможно, это помогает кому-то.

0
задан Kippie 17 January 2019 в 16:00
поделиться