每个HTTP请求上的OWIN模块调用

时间:2016-12-22 16:55:53

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

我是自定义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.");
    }
}

1 个答案:

答案 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方法中编写代码。这是根据请求调用的。