报名参加CloudWeGo黑客松,奖金直推双丰收! 了解详情
写点什么

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

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

关注

评论

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

最佳的18个JAVASCRIPT前端开发框架和库

2D3D前端可视化开发

web前端 Javascript框架 前端开发框架 webgl库 javascript库

如何使用 Kubernetes 实现应用程序的弹性伸缩

API7.ai 技术团队

Prometheus api 网关 APISIX Serverless Kubernetes

MegEngine 使用小技巧:使用 Netron 实现模型可视化

MegEngineBot

深度学习 开源 MegEngine Netron 模型可视化

前端二面高频react面试题集锦

夏天的味道123

前端 React

设计模式第八讲:观察者模式和中介者模式详解

C++后台开发

数据结构 设计模式 后端开发 Linux服务器开发 C++开发

前端常见手写面试题集锦

helloworld1024fd

JavaScript 前端

NFTScan x TiDB丨一栈式 HTAP 数据库为 Web3 数据服务提供毫秒级多维查询

PingCAP

TiDB

React循环DOM时为什么需要添加key

beifeng1996

前端 React

每日一题之请描述Vue组件渲染流程

bb_xiaxia1998

Vue 前端

2023前端二面vue面试题

bb_xiaxia1998

Vue 前端

网心科技以11.3%的市场份额跻身IDC中国边缘公有云市场前三

网心科技

边缘计算 IDC 边缘云 边缘云原生

如何实现文件高速传输,推荐镭速高速文件传输解决方案

镭速

预防DIP器件可焊性问题,看这篇就够了

华秋电子

StarRocks携手零洞科技,助力碧桂园物业企业微信数字化项目

StarRocks

数据库 开源 互联网

金融与科技融合发展,将技术转化成生产力是重中之重

镜舟科技

数据库 数据库·

百度前端一面高频react面试题指南

beifeng1996

前端 React

阿里云云通信风控系统的架构与实践

阿里云CloudImagine

云计算 云通信

逃离同质化,OPPO折叠屏正在笃定远一点的未来

脑极体

OPPO 折叠屏

Python 基础练习题(三)

漫步桔田

2023前端二面手写面试题总结

helloworld1024fd

JavaScript 前端

React的useLayoutEffect和useEffect执行时机有什么不同

beifeng1996

前端 React

用ChatGPT优化AI绘画提示词的探索

Baihai IDP

人工智能 AI AIGC ChatGPT

高频js手写题之实现数组扁平化、深拷贝、总线模式

helloworld1024fd

JavaScript 前端

【AAAI 2023】针对视频分类的知识迁移

Zilliz

计算机视觉

ChatGPT热潮背后,金融行业大模型应用路在何方?——金融行业大模型应用探索

易观分析

金融 科技

人人能读懂redux原理剖析

夏天的味道123

前端 React

美团前端常见面试题整理

loveX001

JavaScript 前端

前端react面试题(边面边更)

beifeng1996

前端 React

每日一题之Vue的异步更新实现原理是怎样的?

bb_xiaxia1998

Vue 前端

JS继承有哪些,你能否手写其中一两种呢?

helloworld1024fd

JavaScript 前端

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