asp.net core中间件工作原理
程序员文章站
2022-07-02 12:35:03
不少刚学习.net core朋友对中间件的概念一直分不清楚,到底StartUp下的Configure方法是在做什么? public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelop ......
不少刚学习.net core朋友对中间件的概念一直分不清楚,到底startup下的configure方法是在做什么?
public void configure(iapplicationbuilder app, ihostingenvironment env) { if (env.isdevelopment()) { app.usedeveloperexceptionpage(); } app.usemvc(); }
大家都说每个request进来都会对configure方法中的中间件执行一遍,但通过调试发现,只有程序在启动时才会执行这段代码,过后的每次请求并不会进入
下面给大家简单解释一下:
假设有3个方法a b c,都有自己的业务逻辑,且参数类型与返回值类型相同
public task methoda(httpcontext context); public task methodb(httpcontext context); public task methodc(httpcontext context);
这个时候假设我通过某种手段将c方法放进b方法变成方法bc,类似:
public task methodbc(httpcontext context) { //方法b原先逻辑 return methodc(context); }
同理将方法bc放进方法a变成方法abc:
public task methodabc(httpcontext context) { //方法a原先逻辑 return methodbc(context); } 展开后: public task methodabc(httpcontext context) { //方法a原先逻辑 //方法b原先逻辑 return methodc(context); }
将原本互不干执的3个方法揉进一个方法中,当服务器接收到请求时,封装好上下文丢进这个聚合方法
换个思路,感觉观察者模式会不会更简单些,iserver中写个事件,有需要往里面注册就好了
那怎么才可以将方法当个参数一样使用呢,自然是委托,下面官方的声明:
中间件中最基础的组件,以httpcontext为参数,task作为返回值
delegate task requestdelegate(httpcontext context);
中间件的基本实现原理:
public requestdelegate use(requestdelegate @delegate) { return (context)=> { //一些逻辑 return @delegate.invoke(context); }; }
细细一想,是不是就是在@delegate前面加了一些逻辑后重新生成一个requestdelegate返回
g
推荐阅读
-
详解在ASP.NET Core 中使用Cookie中间件
-
详解在ASP.NET Core 中使用Cookie中间件
-
ASP.NET Core中间件设置教程(7)
-
Asp.Net Core 通过中间件防止图片盗链的实例
-
浅谈ASP.NET Core 中间件详解及项目实战
-
ASP.NET Core使用GraphQL第二章之中间件
-
(24)ASP.NET Core EF查询(查询的工作原理、跟踪与非跟踪查询)
-
ASP.NET Core 2.2 WebApi 系列【七】泛型仓储模式和工作单元
-
Asp.net Core中如何使用中间件来管理websocket
-
ASP.NET Core中间件计算Http请求时间示例详解