AI 年度盘点与2025发展趋势展望,50+案例解析亮相AICon 了解详情
写点什么

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

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

关注

评论

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

中企出海之宝岛台湾假勤管理

用友BIP

中企出海

全球化财务助力跨国业务的稳定增长和持续发展

用友BIP

微软增加100亿美元AI收入,Salesforce如何对垒?

B Impact

百度文心一格x京东618:打造电商行业首个AI线下广告,节省80%制作成本

飞桨PaddlePaddle

百度 飞桨 AIGC 京东618

HarmonyOS 极客马拉松2023 正式启动,诚邀极客们用键盘码出无限可能!

说山水

阿里云斩获 4 项年度云原生技术服务优秀案例

阿里巴巴云原生

阿里云 云原生

C语言编程语法—排序算法

梦笔生花

C语言 排序算法 6 月 优质更文活动

UI自动化的稳定性和效率

QE_LAB

自动化测试 UI自动化测试 appium

互联网行业-镭速文件传输系统方案

镭速

TrafficRoute:一体化的DNS解析和流量调度套件

火山引擎边缘云

技术 流量 解析 火山引擎边缘云

2023-06-15:说一说Redis的Key和Value的数据结构组织?

福大大架构师每日一题

redis 福大大架构师每日一题

开战在即!与全球伙伴一起打造你的数据应用,TiDB Future App Hackathon 2023 来啦!

PingCAP

数据库 hackathon TiDB

GOTC峰会Sermant发布1.1.0-beta版本,带来哪些提升?

华为云开源

#云原生 #开源 流量治理 #微服务

Django笔记四十三之使用uWSGI部署Django系统

Hunter熊

Python django 部署 uwsgi

C语言代码封装MQTT协议报文,了解MQTT协议通信过程

DS小龙哥

6 月 优质更文活动

华为云CodeArtBuild减负!云端编译构建,让你的开发省时省力!

华为云PaaS服务小智

云计算 代码 华为云 编译构建

对标世界一流,直面全面预算管理差距

用友BIP

全面预算 财务共享

北京国家会计学院千人共聚一堂,大型企业财务数智化盛会!

用友BIP

智能财务 财务共享

香港虚拟主机:探索网站发展的新起点

一只扑棱蛾子

香港虚拟主机

云计算架构设计原则

穿过生命散发芬芳

6 月 优质更文活动

六大类型JavaScript题型

不叫猫先生

JavaScript 6 月 优质更文活动

基于Spark的大规模日志分析

华为云开发者联盟

开发 华为云 华为云开发者联盟 企业号 6 月 PK 榜

你一定要悄悄学会怎么把Vimeo视频保存到手机相册,然后惊艳所有人!

frank

把数字中国,建立在行业感知的底座上

脑极体

行业感知

中企出海之宝岛台湾薪资结算

用友BIP

中企出海

遵循 CI/CD 最佳实践,让高效贯彻整个团队

极狐GitLab

DevOps 自动化 持续集成 CI/CD 持续交付

当AI大模型遇见金融,这四大挑战不容忽视

索信达控股

解析Spring内置作用域及其在实践中的应用

华为云开发者联盟

开发 华为云 华为云开发者联盟 企业号 6 月 PK 榜

人体分割识别图像技术的原理及应用

来自四九城儿

云小课|RDS for MySQL参数模板一键导入导出,参数配置轻松搞定

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 6 月 PK 榜

人体分割识别图像技术的挑战和未来发展

来自四九城儿

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