前言
平安夜快乐!
未来可期,人间值得!
储存阳光,必有远芳。
心中有暖,又何惧人生荒凉!
一、中间件(Middleware)的作用
我们知道,任何的一个web框架都是把http请求封装成一个管道,每一次的请求都是经过管道的一系列操作,最终到达我们写的代码中。那么中间件就是在应用程序管道中的一个组件,用来拦截请求过程进行一些其他处理和响应。中间件可以有很多个,每一个中间件都可以对管道中的请求进行拦截,它可以决定是否将请求转移给下一个中间件。
二、中间件的四种运行方式
默认情况下,中间件的执行顺序根据Startup.cs文件中,在public void Configure(IApplicationBuilder app){} 方法中注册的先后顺序执行。
1、app.Use()
,IApplicationBuilder
接口原生提供,注册等都用它。
2、app.Run()
,是一个扩展方法,它需要一个RequestDelegate
委托,里面包含了Http的上下文信息,没有next参数,因为它总是在管道最后一步执行。
3、app.Map()
,也是一个扩展方法,类似于MVC的路由,用途一般是一些特殊请求路径的处理。
4、app.UseMiddleware<>()
,没错,就是这个了。 为什么说功能强大呢?是因为它不但提供了注册中间件的功能,还提供了依赖注入(DI)的功能,以后大部分情况就用它了。
三、中间件(Middleware)和过滤器(Filter)的区别
熟悉MVC框架的同学应该知道,MVC也提供了5大过滤器供我们用来处理请求前后需要执行的代码。
分别是
AuthenticationFilter,
AuthorizationFilter,
ActionFilter,
ExceptionFilter,
ResultFilter。
同作为两个AOP利器,过滤器更贴合业务,它关注于应用程序本身,比如你看ActionFilter 和 ResultFilter,它是直接与控制器交互的,同时比如我们要对结果进行格式化啦,且要对请求的ViewModel进行数据验证啦,这个时候就是用Filter无疑了。它是MVC的一部分,它可以拦截到你控制器上下文的一些信息,而中间件是没有这个能力的。
四、什么情况我们需要中间件
比如身份验证,Session存储,日志记录等。
其实我们的 asp.net core项目中本身已经包含了很多个中间件,比如MVC本身就是一个中间件。