core 中间件
电脑版发表于:2021/6/18 16:16
前言
中间件和过滤器的作用很相似,但是针对的点不一样
过滤器更贴合业务,它关注于应用程序本身,比如你看ActionFilter 和 ResultFilter,它都直接和你的Action,ActionResult交互了,是不是离你很近的感觉,那我有一些比如对我的输出结果进行格式化啦,对我的请求的ViewModel进行数据验证,就用Filter。它是MVC的一部分,它可以拦截到你Action上下文的一些信息,而中间件是没有这个能力的。
什么情况我们需要中间件
那么,何时使用中间件呢?我的理解是在我们的应用程序当中和业务关系不大的一些需要在管道中做的事情可以使用,比如身份验证,Session存储,我们的 asp.net core项目中本身已经包含了很多个中间件。mvc本日志记录,移除处理等。其实身也是一个中间件
定义一个中间件
public class RequestIPMyMiddleware { private readonly RequestDelegate _next; private readonly ILogger _logger; public RequestIPMyMiddleware(RequestDelegate next, ILoggerFactory logger) { _next = next; _logger = logger.CreateLogger<RequestIPMyMiddleware>(); } public async Task Invoke(HttpContext context) { await _next.Invoke(context); //执行下一个中间件 } }
但是这样添加的中间件与原始系统是的中间件有点不一样
使用扩展方法中转添加中间件,这样使用使用起来就更加方便了
public static class RequestIPMiddlewareExtands { public static IApplicationBuilder UseMyIp(this IApplicationBuilder app) { //链式编程 return app.UseMiddleware<RequestIPMyMiddleware>(); } }
接下来添加的中间件