我是自定义OWIN开发的新手,更不用说在.NET Core中编写它了。我开始编写一个OWIN模块,我可以在Startup类的Configure方法中将它连接起来。它可以工作,但它只在应用程序第一次启动时执行。我希望在每个HTTP请求上调用这个OWIN中间件。
这在.NET Core中是否可行?在.NET Framework 4.5中,我们可以使用“StageMarkers”(app.UseStageMarkers)。看起来这不是.NET Core中的一个选项。
这是我在启动时的实现:
app.UseMiddleware<SiteThemerMiddleware>();
这是我的SiteThemerMiddleware(还没有真正完成):
public class SiteThemerMiddleware
{
private readonly RequestDelegate _next;
public SiteThemerMiddleware(RequestDelegate next)
{
_next = next;
//_logger = loggerFactory.CreateLogger<SiteThemerMiddleware>();
}
public async Task Invoke(HttpContext context)
{
//_logger.LogInformation("Handling request: " + context.Request.Path);
await _next.Invoke(context);
//_logger.LogInformation("Finished handling request.");
}
}
答案 0 :(得分:1)
ASP.NET Core的管道类似于但不是直接OWIN(有关详细信息,请参阅https://docs.microsoft.com/en-us/aspnet/core/fundamentals/owin)。以前,katana是ASP.NET在包括System.Web在内的各种主机上实现OWIN。
这在.NET Core中是否可行?在.NET Framework 4.5中,我们可以使用“StageMarkers”(app.UseStageMarkers)。它似乎不是.NET CORE中的一个选项
UseStageMarkers与在每个请求上运行中间件无关。它是关于在System.Web上的IIS集成管道中的各个阶段交错中间件。
如果要在每个请求上运行逻辑,那么只需在中间件的Invoke方法中编写代码。这是根据请求调用的。