QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

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

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

关注

评论

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

实现大文件远程传输、备份和共享的小秘诀

镭速

大文件远程传输

华秋慕尼黑上海电子展圆满收官,数字化赋能智能制造!

华秋电子

深开鸿与华秋达成生态共创合作,共同打造硬件生态

华秋电子

软通动力与华秋达成生态共创合作,共同推动物联网硬件创新

华秋电子

LeetCode题解:2618. 检查是否是类的对象实例,迭代和递归

Lee Chen

JavaScript LeetCode

直播预告 | 博睿学院:让Arthas带你玩转jvm

博睿数据

JVM 可观测性 智能运维 博睿数据 博睿学院

向量检索在大模型应用场景的技术和实践

Baidu AICLOUD

向量检索 大模型

点云标注在自动驾驶中的实践应用与挑战

数据堂

应对突发流量,如何快速为自建 K8s 添加云上弹性能力

阿里巴巴云原生

阿里云 Kubernetes 云原生

点云标注中的隐私保护和数据安全问题

数据堂

软件测试/测试开发丨Linux常用命令之性能统计

测试人

Python Linux 程序员 性能 软件测试

润和软件与华秋达成生态共创合作,共同推动物联网硬件创新

华秋电子

MES1.0.0正式发布|万界星空推出免费的MES系统

万界星空科技

开源 MES系统 制造业生产管理系统

国内市场知名的数据可视化工具

2D3D前端可视化开发

数据分析 数据可视化 商业智能 数据可视化工具 可视化大屏

IBM收购数据可观测性厂商 Databand.ai

乘云数字DataBuff

软件测试 | Java语言的特点

测吧(北京)科技有限公司

测试

阿里云蝉联 FaaS 领导者,产品能力获最高分

阿里巴巴云原生

阿里云 云原生 函数计算

开鸿智谷与华秋达成生态共创合作,共同打造硬件生态

华秋电子

先楫半导体与华秋达成生态共创合作,共建技术生态社区

华秋电子

将DAST集成到CI/CD管道中的优势和实施步骤

互联网工科生

CI/CD DAST web 服务

低代码技术分享官丨BPMN 2.0简介

inBuilder低代码平台

流程 低代码平台

有哪些好用的远程传输大文件的软件

镭速

远程传输大文件

aspera替代方案:可靠和高效的企业文件传输工具

镭速

aspera替代方案 企业文件传输工具

软件测试/测试开发丨Python 数据类 dataclass 学习笔记

测试人

Python 软件测试 dataclass

在《比特与瓦特》的交点,藏着未来能源的一些真相

脑极体

新能源

HashData:让大模型“飞入寻常百姓家”

酷克数据HashData

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