【问题标题】:How to integrate existing OwinMiddleware into a .Net Core 2.0 app pipeline?如何将现有的 OwinMiddleware 集成到 .Net Core 2.0 应用程序管道中?
【发布时间】:2018-05-31 22:06:50
【问题描述】:

我有一些现有的 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(),这似乎是前进的道路,但我无法破译如何使用它来调用我的“遗产”上面的中间件。我意识到在配置IApplicationBuilder 时应该使用UseOwin(),但我不够聪明,无法从网上阅读的内容中获取详细信息。

最直接的方法是什么?

【问题讨论】:

  • @CamiloTerevinto 是的(我在我的问题中添加了该链接),但它提供的唯一示例使用方法作为中间件 - 我认为没有人真正这样做。我的中间件都是独立的类,UseOwin 的签名让我很头疼。我想我真的在寻找UseOwin 的示例来调用(多个)中间件类。

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


【解决方案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>>();
}));

请注意,Microsoft 似乎对OwinMiddleware 类施加了强烈的压力,因为这感觉很hacky。

【讨论】:

  • 似乎也对我有用。我同意 MS 让这件事变得比应有的更难的观点。
猜你喜欢
  • 2020-11-24
  • 1970-01-01
  • 2011-11-07
  • 1970-01-01
  • 1970-01-01
  • 2021-03-06
  • 2020-02-24
  • 1970-01-01
相关资源
最近更新 更多