写点什么

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

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

关注

评论

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

2021-07-25 Java基础

Java 程序员 后端

区块链之符号理论:抽象化和身份管理的必要条件

CECBC

数字原生,创新生长|企业如何打造数字创新的“飞天梦”?

阿里巴巴云原生

阿里云 产品 云原生 双十一

分片技术:如何解决区块链的性能问题?

CECBC

2021总结全网最新、最全、最实用Java岗面试真题!已收录GitHub

Java 程序员 后端

Redis 6.0 新特性篇:多线程网络模型全面解密

码哥字节

redis 多线程 IO多路复用 11月日更

2021社招阿里、腾讯、蚂蚁金服「4面」Java面试高频题分享

Java 程序员 后端

2021,你还在写“赤裸裸”的API吗?

Java 程序员 后端

22款终端生产力工具,效率飞起!

Java 程序员 后端

2021最新出炉BAT架构实战文档:多线程与高并发+分布式+微服务

Java 程序员 后端

为什么区块链和加密资产对于实现元宇宙很重要?

CECBC

System.Text.Json 中的字符编码

喵叔

11月日更

2021春招Java后端开发面试总结:25个技术专题(最全面试攻略)

Java 程序员 后端

OpenVINO基于Tensorflow的模型训练及优化部署

IT蜗壳-Tango

11月日更

2021最新分享字节四面成功拿Offer!

Java 程序员 后端

2021最新分享成功入职腾讯(后台开发岗)面经

Java 程序员 后端

解决:interface conversion: interface {} is float64, not int

liuzhen007

11月日更

2021年备战金三银四:死磕“源码”篇(Java程序员必看

Java 程序员 后端

2021最新分享成功入职阿里巴巴(口碑部门)面经

Java 程序员 后端

2021金三银四,献给程序员从入门到放弃的 Java 架构师面试题

Java 程序员 后端

2021,你还在写“赤裸裸”的API吗?(1)

Java 程序员 后端

21世纪什么最贵?“人才”看阿里大佬用一本书带你读懂TCP-IP协议

Java 程序员 后端

2021-06-05# Java基础(dayFourteen):锁的两种方式

Java 程序员 后端

2021最新分享“天猫”面经:10万字大厂面试总结

Java 程序员 后端

【MySQL技术专题】「索引技术系列」体验前所未有的技术探险,看穿索引的本质和技术体系(上篇)

码界西柚

MySQL 索引原理 11月日更

架构训练营第 3 期模块三作业

吴霏

「架构实战营」

2021美团高级工程师亲自汇总九大面试专题(附1000字解析)

Java 程序员 后端

2021阿里大牛最新发布:Java高频面试题和核心技术(已涨薪6K)

Java 程序员 后端

2021字节总监最新发布:JVM +GC优质手册!面试专属

Java 程序员 后端

进击的Java(二)

ES_her0

11月日更

2021阿里巴巴钻石级级“Docker全线笔记”新鲜出炉

Java 程序员 后端

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