找回密码
 立即注册
快捷导航

[.NET] Net 7 中间件

[复制链接]
狗蛋 2023-7-7 18:33:55 | 显示全部楼层
本帖最后由 狗蛋 于 2023-7-7 18:40 编辑

中间件是一种 装配到应用管道以处理请求和响应的软件 。每个组件:

- 选择是否将请求传递到管道中的下一个组件。
- 可在管道中的下一个组件前后执行工作。

请求委托用于生成请求管道。请求委托处理每个HTTP请求。

使用RunMap和Use扩展方法来配置请求委托。可将一个单独的请求委托并行指定为匿名方法(称为并行中间件),或在可重用的类中对其进行定义。这些可重用的类和并行匿名方法即为中间件,也叫中间件组件。

请求管道中的每个中间件组件负责调用管道中的下一个组件,或使管道短路。当中间件短路时,它被称为“终端中间件”,因为它阻止中间件进一步处理请求。

ASP.NET Core 请求管道包含一系列请求委托,依次调用。下图演示了这一概念。沿黑色箭头执行。

Net 7 中间件5574 作者:狗蛋 帖子ID:442


每个委托均可在下一个委托前后执行操作:
var builder = webApplication.CreateBuilder(args);
var app = builder.Build();

app.Run(async context =>{
    await context.Response.WriteAsync("Hello world!");
});

app.Run();

用Use将多个请求委托链接在一起。next参数表示管道中的下一个委托。可通过不调用next参数使管道短路。

通常可在next委托前后执行操作,如以下示例所示:

var builder = webApplication.CreateBuilder(args);
var app = builder.Build();

app.Use(async(context,next)=>
    //DoworkthatcanwritetotheResponse.
    await next.Invoke();
    //Do logging or other work that doesn't writetothe Response.
);

app.Run(async context =>{
    await context.Response.WriteAsync("Hello from 2nd delegate!");
});

app.Run();

当委托不将请求传递给下一个委托时,它被称为“让请求管道短路”。通常需要短路,因为这样可以避免不必要的工作。

中间件执行顺序

下图显示了 ASP.NET Core MVCRazor Pages 应用的完整请求处理管道。你可以在典型应用中了解现有中间件的顺序,以及在哪里添加自定义中间件。你可以完全控制如何重新排列现有中间件,或根据场景需要注入新的自定义中间件。

Net 7 中间件5678 作者:狗蛋 帖子ID:442

上图中的 “终结点” 中间件为相应的应用类型(MVC或Razor Pages)执行筛选器管道。

向Program.cs文件中添加中间件组件的顺序定义了针对请求调用这些组件的顺序,以及响应的相反顺序。此顺序对于安全性、性能和功能至关重要。







回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

温馨提示

关于 注册码 问题

      由于近期经常大量注册机器人注册发送大量广告,本站开启免费入群领取注册码注册网站账号,注册码在群公告上贴着...

关于 注册码 问题

      由于近期经常大量注册机器人注册发送大量广告,本站开启免费入群领取注册码注册网站账号,注册码在群公告上贴着...

Archiver|手机版|小黑屋|DLSite

GMT+8, 2024-11-23 00:38

Powered by Discuz! X3.5 and PHP8

快速回复 返回顶部 返回列表