在本篇博客中,我将介绍一下IStartupFilter, 以及如何在ASP.NET Core中使用它。在下一篇博客中,我将介绍一下如何在外部中间件中使用IStartupFilter
IStartupFilter接口
IStartupFilter接口存在于Microsoft.AspNetCore.Hosting.Abstractions程序集中,它非常简单,仅定义了一个接口方法。
namespace Microsoft.AspNetCore.Hosting { public interface IStartupFilter { Action<IApplicationBuilder> Configure(Action<IApplicationBuilder> next); } }其中Configure方法返回了一个变量Action。
当创建一个ASP.NET Core应用程序的时候,IApplicationBuilder负责配置ASP.NET Core的中间件管道。例如你可以在Startup.cs文件的Configure方法中,看到以下类似的代码。
public void Configure(IApplicationBuilder app) { app.UseStaticFiles(); app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); }); }在这个方法中,你可以直接使用方法提供的IApplicationBuilder参数,并且可以向其中添加各种中间件。使用IStartupFilter, 你可以指定并返回一个Action类型的泛型委托,这意味你除了可以使用方法提供的泛型委托配置IApplicationBuilder对象, 还需要返回一个泛型委托。
IStartupFilter方法可以接受一个配置IApplicationBuilder的方法,换而言之IStartupFilter.Configure方法可以使用Startup.Configure方法作为参数。
例:
Startup _startup = new Startup(); Action<IApplicationBuilder> startupConfigure = _startup.Configure; //后续会补充StartupFilter1类的代码 IStartupFilter filter1 = new StartupFilter1(); Action<IApplicationBuilder> filter1Configure = filter1.Configure(startupConfigure) //后续会补充StartupFilter2类的代码 IStartupFilter filter2 = new StartupFilter2(); Action<IApplicationBuilder> filter<
