中间件注册可以除了可以使用Startup之外,还可以选择StartupFilter
2016-11-28 11:38
477 查看
中间件注册可以除了可以使用Startup之外,还可以选择StartupFilter
[code]
[/code]
[/code]
我们可以采用服务注册的方式注册多个StartupFilter。具体来说,StartupFilter具有如下两种不同的注册方式,一种是通过调用WebHostBuilder的ConfigureServices方法以服务的形式注册所需的StartupFilter,另一种则是将针对StartupFilter的服务注册实现在启动类的ConfigureServices方法上。
[code][code]
[/code]
[/code]
既然中间件可以同时通过Startup和StartupFilter进行注册,那么通过这两个种方式注册的中间件有何不同吗?其实它们唯一的区别在于StartupFilter注册的中间件会先执行。话句话说,对于由注册中间件构成的管道来说,通过Startup注册的中间件位于通过StartupFilter注册的中间件之后。我们不妨通过一个简单的实例来证实这一点。我们在一个ASP.NET Core控制台应用中定义如下四个中间件类型(Foo、Bar、Baz和Gux),它们针对请求的处理逻辑很简单,就是将自身的类型名称写入请求的响应中。
[code][code]
[/code]
[/code]
接下来我们定义了如下一个泛型的 StartupFilter<TMiddleware>类,这是一个专门用于注册指定类型中间件的StartupFilter,泛型参数代表注册的中间件类型。在实现的Configure方法中,我们将中间件的注册实现在返回的Action<IApplicationBuilder>对象中。
[code][code]
[/code]
[/code]
我们最终编写如下一段简单的程序来启动承载的应用程序。如下面的额代码片段所示,在利用WebHostBuilder创建并启动WebHost之前,我们调用其ConfigureServices方法注册了两个StartupFilter<TMiddleware>对象,它们对应的中间件类型分别为Foo和Bar。在随后调用的Configure方法中,我们又完成了针对中间Baz和Gux的注册。这段程序实际上注册了五个中间件(调用ApplicationBuilder的Run方法可以视为中间件注册)。
[code][code]
[/code]
[/code]
我们现在需要确定注册的这五个在进行请求处理过程中的执行顺序。为此我们直接启动这个程序,然后开启浏览器访问默认的监听地址(http://localhost:5000),浏览器会按照如下图所示形式显示出请求在这个五个中间件中的“路由”。浏览器显示的结果清晰地表明通过StartupFilter注册的中间件比通过Startup注册的中间件先执行。对于两个采用相同方式注册的中间件,先被注册的中间会先执行。
相关文章推荐
- 学习ASP.NET Core, 怎能不了解请求处理管道[5]: 中间件注册可以除了可以使用Startup之外,还可以选择StartupFilter
- 不同页面之间传值除了Cookie,Session之外,还可以使用页面的上下文对象
- 在C#中可以使用RegisterClientScriptBlock、RegisterStartupScript和RegisterClientScriptInclude来向客户端注册脚本,它们的区别
- 在应用程序级别之外使用注册为allowDefinition='MachineToApplication' 的节是错误的
- 在应用程序级别之外使用注册为 allowDefinition='MachineToApplication' 的节是错误的。如果在 IIS 中没有将虚拟目录配置为应用程序
- 在应用程序级别之外使用注册为 allowDefinition='MachineToApplication' 的节是错误的原因
- 在应用程序级别之外使用注册为 allowDefinition='MachineToApplication' 的节是错误的
- 注册模块---用户注册后,上传大图,可以在此大图的剪裁并选择自己合适的位置
- 关于“在应用程序级别之外使用注册为 allowDefinition='MachineToApplication' 的节是错误的。如果在 IIS 中没有将虚拟目录配置为应用程序”的错误
- 在应用程序级别之外使用注册为allowDefinition='MachineToApplication' 的节是错误的
- 在应用程序级别之外使用注册为 allowDefinition='MachineToApplication' 的节是错误的。如果在 IIS 中没有将虚拟目录配置为应用程序
- "在应用程序级别之外使用注册为 allowDefinition='MachineToApplication' 的节是错误的。如果在 IIS 中没有将虚拟目录配置为应用程序,则可能导致此错误"的解决方法
- 任何人都可以重构---使用 Eclipse 自动重构特性的方法与原因 选择自 shanyou 的 Blog
- "在应用程序级别之外使用注册为 allowDefinition='MachineToApplication' 的节是错误的"错误的原因和处理
- 在应用程序级别之外使用注册为 allowDefinition='MachineToApplication' 的节是错误的。如果在 IIS 中没有将虚拟目录配置为应用程序,则可能导致此错误
- ASP.net 中 使用ClientScript.RegisterStartupScript() 注册脚本
- 在应用程序级别之外使用注册为 allowDefinition='MachineToApplication' 的节是错误的。如果在 IIS 中没有将虚拟目录配置为应用程序,则可能导致此错误。
- 在应用程序级别之外使用注册为 allowDefinition='MachineToApplication' 的节是错误的原因
- 在应用程序级别之外使用注册为allowDefinition='MachineToApplication' 的节是错误的
- [IE技巧] IE 除了用来上网之外,还可以用来做计算器