Как интегрировать существующее OwinMiddleware в конвейер приложений .Net Core 2.0? - PullRequest
0 голосов
/ 01 июня 2018

У меня есть несколько существующих классов промежуточного программного обеспечения Owin, изначально написанных для приложений .Net 4.6, которые следуют этой схеме:

public class MyMiddleware : OwinMiddleware
{
    public MyMiddleware(OwinMiddleware next) : base(next)
    { }

    public override async Task Invoke(IOwinContext context)
    {
        // do stuff
        await Next.Invoke(context)
    }
}

Я пишу новое приложение .Net Core 2.0, которое я бынравится использовать эти промежуточные программы в (а также некоторые промежуточные программы «нового стиля», которые не основаны на Owin).У меня проблемы с поиском хорошей документации или примеров того, как это сделать, по крайней мере, те, которые похожи на то, что у меня есть (например, this )

Одна многообещающая вещь, которую я нашел, эточто пакет Microsoft.AspNetCore.Owin включает в себя метод расширения, UseOwin(), который, кажется, является путем вперед, но я не могу расшифровать, как его использовать для вызова моих «устаревших» промежуточных программ, описанных выше.Я понимаю, что должен использовать UseOwin() при настройке моего IApplicationBuilder, но я недостаточно умен, чтобы получить подробности из того, что я читаю в Интернете.

Какой самый простой способ сделать это?

1 Ответ

0 голосов
/ 01 июня 2018

Кажется, что самый простой способ сделать это - использовать метод расширения UseOwin.

Мне удалось заставить это работать:

public class MyTestMiddleware : OwinMiddleware
{
    public MyTestMiddleware(OwinMiddleware next) : base(next) {}

    public override async Task Invoke(IOwinContext context)
    {
        System.Diagnostics.Debug.WriteLine("INVOKED");

        await Next.Invoke(context);
    }
}

app.UseOwin(setup => setup(next =>
{
    var owinAppBuilder = new AppBuilder();

    // set the DefaultApp to be next so that the ASP.NET Core pipeline runs
    owinAppBuilder.Properties["builder.DefaultApp"] = next;

    // add your middlewares here as Types
    owinAppBuilder.Use(typeof(MyTestMiddleware));

    return owinAppBuilder.Build<Func<IDictionary<string, object>, Task>>();
}));

Обратите внимание, что Microsoft кажетсячтобы настойчиво противодействовать OwinMiddleware классам, так как это кажется очень хакерским.

...