加入收藏 | 设为首页 | 会员中心 | 我要投稿 济源站长网 (https://www.0391zz.cn/)- 数据工具、数据仓库、行业智能、CDN、运营!
当前位置: 首页 > 站长学院 > Asp教程 > 正文

ASP.NET Core处理管道的深入理解

发布时间:2020-12-11 00:33:13 所属栏目:Asp教程 来源:网络整理
导读:这篇文章主要给大家介绍了关于ASP.NET Core处理管道的深入理解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下

Func<RequestDelegate, RequestDelegate> middleware4 = next => { return (HttpContextSample context) => { var step4 = new RequestCultureMiddleware(next); // 中间件 4 的处理 var result = step4.InvokeAsync (context); return result; }; }; _components.Add (middleware4);

在 ASP.NET Core 中使用按照约定定义的中间件语法与使用强类型方式相同:

.UseMiddleware<RequestCultureMiddleware >();

中间件的顺序

中间件安装一定顺寻构造成为请求处理管道,常见的处理管道如下所示:

ASP.NET Core处理管道的深入理解

实现 BeginRequest 和 EndRequest

理解了请求处理管道的原理,下面看它的一个应用。

在 ASP.NET 中我们可以使用预定义的 Begin_Request 和 EndRequest 处理步骤。

现在整个请求处理管道都是我们自己来进行构建了,那么怎么实现 Begin_Request 和 EndRequest 呢?使用中间件可以很容易实现它。

首先,这两个步骤是请求处理的第一个和最后一个步骤,显然,该中间件必须是第一个注册到管道中的。

所谓的 Begin_Request 就是在调用 next() 之间的处理了,而 End_Request 就是在调用 next() 之后的处理了。在 https://stackoverflow.com/questions/40604609/net-core-endrequest-middleware 中就有一个示例,我们将它修改一下,如下所示:

public class BeginEndRequestMiddleware { private readonly RequestDelegate _next; public BeginEndRequestMiddleware(RequestDelegate next) { _next = next; } public void Begin_Request(HttpContext context) { // do begin request } public void End_Request(HttpContext context) { // do end request } public async Task Invoke(HttpContext context) { // Do tasks before other middleware here, aka 'BeginRequest' Begin_Request(context); // Let the middleware pipeline run await _next(context); // Do tasks after middleware here, aka 'EndRequest' End_Request(); } }

Register

public void Configure(IApplicationBuilder app) { // 第一个注册 app.UseMiddleware<BeginEndRequestMiddleware>(); // Register other middelware here such as: app.UseMvc(); }

(编辑:济源站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读