gpt4 book ai didi

c# - ASP.NET Core OWIN 中间件

转载 作者:行者123 更新时间:2023-11-30 23:15:18 38 4
gpt4 key购买 nike

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

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

注册:

app.UseSiteThemer();

Site Themer 扩展类:

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 Core 管道的两个方面来实现您的目标:排序和分支。

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

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

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

关于c# - ASP.NET Core OWIN 中间件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42673469/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com