c# - 如何将现有的 OwinMiddleware 集成到 .Net Core 2.0 应用程序管道中?
问题描述
我有一些现有的 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
但我不够聪明,无法从在线阅读的内容中获取详细信息。
最直接的方法是什么?
解决方案
似乎最直接的方法是通过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。
推荐阅读
- java - 将 ETL 链中的所有转换器模拟为单个 Mock
- javascript - LitElement Web 组件表单事件目标设置为 null
- python - 如何在 Flask/Connexion 中获取原始请求负载?
- reactjs - 在 React js 中运行测试用例时包含 PDF 文件时没有此类文件或目录错误
- r - 以闪亮的方式显示地图
- python - 如何检测我的 Python 脚本是否在“Windows 终端”中运行
- python - 熊猫:无法将对象转换为日期时间
- unix - 从每一行获取最大值和最小值(unix)
- java - 如何定义用于 apache camel 的 MS SQL 数据源?
- windows - 列表项中的嵌套 UI 未正确水平对齐