写点什么

ASP.NET Core 提供模块化 Middleware 组件

  • 2016-03-11
  • 本文字数:1076 字

    阅读完需:约 4 分钟

ASP.NET Core 引入了中间件(middleware)的概念来定义HTTP 管道(pipeline)。中间件是一系列组合在一起形成web 应用程序的组件。这个概念的灵感来源于 OWIN 和 Katana ,在 ASP.NET 早期版本中也提供了类似的功能。

一个中间件是 HTTP 管道中的一个组件。中间件逐个执行,并在管道中链式地调用下一个中间件。每个中间件都可以终止调用链。例如,如果认证过程失败,则认证中间件不会再执行下一个中间件。下图说明了执行流程。

除了 ASP.NET Core 中内置的中间件,我们也可以创建新的中间件。如果需要自定义中间件,可以编写一个类,该类中必须包含以 HttpContext 作为第一个参数的方法。这个方法允许增加其他参数,可以通过依赖注入进行解析。下面的类定义了一个日志中间件:

复制代码
public class RequestLoggerMiddleware
{
private readonly RequestDelegate _next;
private readonly ILogger _logger;
public RequestLoggerMiddleware(RequestDelegate next, ILoggerFactory loggerFactory)
{
_next = next;
_logger = loggerFactory.CreateLogger<requestloggermiddleware>();
}
public async Task Invoke(HttpContext context)
{
_logger.LogInformation("Handling request: " + context.Request.Path);
await _next.Invoke(context);
_logger.LogInformation("Finished handling request.");
}
}
</requestloggermiddleware>

中间件必须在 Startup 类的 Configure 方法中进行注册才可以执行。

复制代码
public void Configure(IApplicationBuilder app)
{
app.UseMiddleware<requestloggermiddleware>();
}
</requestloggermiddleware>

一点需要注意的是,中间件的执行顺序依赖于它们添加到管道中的顺序。这就意味着必须花费一些精力确定中间件之间隐含的依赖关系。例如,一个组件要使用会话状态,但是如果它在会话中间件之前执行,则会导致崩溃。

伴随着 ASP.NET Core“为你所用的资源付费”的理念,一些应用程序的性能可能会有所改善,因为只有明确配置的中间件才会执行。该框架不再依赖于 System.Web.dll;组件将以 NuGet 包的形式提供。这也意味着组件的更新将由 NuGet 负责处理,并且每个中间件均可独立更新。

查看英文原文 ASP.NET Core Provides Modularity with Middleware Components


感谢邵思华对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群(已满),InfoQ 读者交流群(#2))。

2016-03-11 18:004120
用户头像

发布了 31 篇内容, 共 11.4 次阅读, 收获喜欢 0 次。

关注

评论

发布
暂无评论
发现更多内容

Pod 卡在 Terminating 怎么办?

小猿姐

Kubernetes kubernetes pod

ShareSDK第三方平台使用指南——新浪微博

MobTech袤博科技

Java 开发者 产品动态

日程管理多源归一,服务场景一键直达

HarmonyOS SDK

HarmonyOS

第61期|GPTSecurity周报

云起无垠

谷歌新AI模型在国际奥数竞赛达到银牌标准!OpenAI推出AI搜索引擎SearchGPT挑战谷歌!|AI日报

可信AI进展

人工智能

JProfiler for Mac(Java开发分析软件) JProfiler

Rose

Java 开发 JProfiler 14下载 JProfiler 14破解版

硅纪元视角 | 苹果AI训练数据大曝光,坚持用户隐私第一

硅纪元

AlDente Pro :苹果电脑电池管理工具 延长电池寿命

Rose

苹果电脑 电池管理 AlDente Pro破解版 电池寿命

低代码平台在采购管理中的革新与应用

天津汇柏科技有限公司

低代码 采购管理 软件定制开发

ETL数据集成丨将DB2数据同步至Postgres数仓实践

谷云科技RestCloud

数据库 postgresql 数据同步 ETL 数据集成工具

文献解读-遗传病-第二十五期|《通过贝叶斯和单倍型预测胎儿基因型进行单基因病的无创产前诊断》

INSVAST

基因测序 基因数据分析 生信服务 遗传病测序 遗传病

Databend 开源周报第 155 期

Databend

基于大模型的对话式数据分析产品“腾讯云 ChatBI ”正式上线公测

腾讯云大数据

腾讯云 BI

Apple Intelligence将在今年10月推出?AI毛绒玩具BubblePal回答人类幼崽十万个为什么!|AI日报

可信AI进展

人工智能

数据分析统计Minitab Express for Mac破解补丁 及安装教程 兼容m芯片

Rose

数据统计 Mac 软件 数据分析软件 Minitab Express下载 Minitab Express破解版

超13万律师使用的工具,启信宝推出“司法大数据”功能

合合技术团队

人工智能 大数据 司法

macOS Catalina for mac (macos 10.15系统)v10.15.7正式版

Rose

复古传奇,经典归来,清渊传奇详细图文架设教程

echeverra

清渊传奇

最佳实践分享 I 流程挖掘助力头部科技企业信创之路数字化转型

望繁信科技

数字化转型 降本增效 科技企业 流程挖掘 望繁信科技

综合性价比超越硅谷,PPIO派欧云发布下一代推理加速引擎

极客天地

两个爆点,引爆在线教育平台数智化

字节跳动数据平台

在线教育 可视化 云服务 数智化

跨平台的SSH、Telnet和SFTP客户端Termius for Mac v8.4.0直装激活版

Rose

Termius for Mac破解

微服务架构革新:百度Jarvis2.0与云原生技术的力量

百度Geek说

微服务架构 企业号2024年7月PK榜 百度商业产品矩阵 Jarvis应用托管平台

React 的 KeepAlive 实战指南:深度解析组件缓存机制

袋鼠云数栈

前端 技术人 UED keepalive keep-alive实现原理

油猴Safari浏览器辅助插件 油猴脚本Tampermonkey mac版下载安装教程

Rose

Tampermonkey插件 油猴脚本使用

Autodesk AutoCAD2020(附安装教程图解) 激活特别版 mac/win

Rose

AutoCAD2022序列号 autocad2022秘钥

macos big sur 软件icons图标大全(新增至2719枚大苏尔风格图标)

Rose

ASP.NET Core提供模块化Middleware组件_.NET_Pierre-Luc Maheu_InfoQ精选文章