写点什么

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:004057
用户头像

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

关注

评论

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

【YashanDB知识库】收集统计信息时报错YAS-00507 date/timestamp value overflow

YashanDB

数据库 yashandb

NFTScan | 12.23~12.29 NFT 市场热点汇总

NFT Research

NFT NFT\ NFTScan

微店API接口深度探索:如何高效获取商品详情及简短代码示例

代码忍者

微店商品详情API接口 微店商品列表API

Linux服务器检查以及常用运维shell命令

轶天下事

【YashanDB知识库】如何使用jdbc向YashanDB批量插入gis数据

YashanDB

数据库 yashandb

块级迁移和文件级迁移的区别

天翼云开发者社区

块级迁移 文件级迁移

部署个人博客管理系统Ghost

轶天下事

华科附属同济医院携手和鲸科技,打造科研管理服务一体化平台,加快研究型医院建设

ModelWhale

人工智能 大数据 互联网

智元开源百万真机数据集!具身智能领域的ImageNet时刻已到来!

极客天地

央视聚焦!揭秘千行百业背后的“算力引擎”!

极客天地

基于ArgoCD和Testkube打造GitOps驱动的Kubernetes测试环境

俞凡

gitops

Golang插件系统实现

俞凡

golang

企业组网的作用及SD-WAN的优势

Ogcloud

SD-WAN 组网 企业组网 SD-WAN组网 SDWAN

腾讯 StereoCrafter:2D 视频转 3D 视频效果;支付宝推出新 AI 视觉搜索产品「探一下」丨 RTE 开发者日报

声网

轻松打造高效日志系统

俞凡

架构 最佳实践

AppCrawler 自动遍历测试实践(三):动手实操与常见问题汇总

测试人

软件测试

云起无垠入选中国信息通信研究院2024年度首期“磐安”优秀案例

云起无垠

EIP和NAT结合如何实现统一公网出口IP

天翼云开发者社区

NAT网关 EIP

给 Postgres 写一个向量插件 - 介绍

极限实验室

Postgrest vector database

C++ vs Rust vs Go 性能比较

俞凡

c++ golang rust

制造业数字化转型要注重哪些方面?

万界星空科技

数字化转型 制造业 mes 万界星空科技mes

部署内容管理系统Joomla

轶天下事

7thonline第七在线助力羽绒服巨头加拿大鹅实现智能化商品管理

第七在线

【YashanDB知识库】druid连接池查询空间数据报错read time out

YashanDB

数据库 yashandb

性能媲美裸金属,边缘场景高性能虚拟机技术揭秘

火山引擎边缘云

边缘计算 虚拟机 火山引擎 裸金属

全链路解析如何构建数据资产管理框架及落地实践

袋鼠云数栈

【YashanDB知识库】如何在备机节点上做备份和恢复

YashanDB

数据库 yashandb

【YashanDB知识库】hive初始化崖山报错YAS-04209

YashanDB

数据库 yashandb

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