【发布时间】:2018-06-01 07:09:12
【问题描述】:
我有一个 ASP.NET Core 应用程序和一个简单的 OWIN 中间件来检查一些数据。但我只想在请求页面时运行中间件。现在它在请求资产时运行,例如图像、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.");
}
}
【问题讨论】:
-
在管道中添加它比静态文件处理程序中间件晚?
-
向我们展示您如何注册中间件。关键可能是从注册 .Use 切换到注册 .Map 但没有只是猜测的代码。
-
@tpeczek 我继续更新我的代码,谢谢!
标签: c# asp.net-core owin