ASP.NET 核心 OWIN 中间件

ASP.NET Core OWIN Middleware

我有一个 ASP.NET 核心应用程序和一个简单的 OWIN 中间件来检查一些数据。但是我只想 运行 在请求页面时使用中间件。现在 运行ning 请求资产以及图像、css 等

如何让 owin 中间件代码只在页面请求时执行?

报名人数:

app.UseSiteThemer();

Site Themer 扩展 class:

public static class SiteThemerExtensions
{
    public static IApplicationBuilder UseSiteThemer(this IApplicationBuilder builder)
    {
        return builder.UseMiddleware<SiteThemerMiddleware>();
    }
}

OWIN 中间件:

public class SiteThemerMiddleware
{
    private readonly RequestDelegate _next;
    private readonly ISiteService _siteService;

    public SiteThemerMiddleware(RequestDelegate next, ISiteService siteService)
    {
        _siteService = siteService;
        _next = next;
        //_logger = loggerFactory.CreateLogger<SiteThemerMiddleware>();
    }

    public async Task Invoke(HttpContext context)
    {
        await Task.Run(() =>
         {

             Console.Write("OWIN Hit");
         });


        //_logger.LogInformation("Handling request: " + context.Request.Path);
        await _next.Invoke(context);
        //_logger.LogInformation("Finished handling request.");
    }
}

ASP.NET 核心管道有两个方面可以用于您的目标:排序和分支。

关于排序的规则非常简单 - 添加中间件的顺序就是它们将要执行的顺序。这意味着如果像你这样的中间件被放置在一些可以结束管道的中间件(例如静态文件)之后,它不会在发生时被调用。

为了分支管道,您可以使用 MapMapWhen 方法。第一个基于路径分支管道,而另一个基于谓词。添加MapMapWhen的中间件只有满足分支条件才会被调用

您可以阅读有关管道的更多详细信息here