如何将现有的OwinMiddleware集成到.Net Core 2.0应用程序管道中?

时间:2018-05-31 22:06:51

标签: c# asp.net-core owin owin-middleware

我有一些现有的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 :(得分:1)

似乎最简单的方法是通过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>>();
}));

请注意,微软似乎已经对OwinMiddleware课程进行了强硬推动,因为这感觉非常糟糕。