QCon北京|3天沉浸式学习,跳出信息茧房。 了解详情
写点什么

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

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

关注

评论

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

软件测试/测试开发丨软件测试中的人工智能

测试人

人工智能 软件测试

友商“喜提”热搜还遭“补刀”,论专业还得是华为云这款轻量应用服务器

轶天下事

软件测试/测试开发丨软件测试中为什么需要人工智能

测试人

人工智能 软件测试

悦数图数据库 v3.6.0 发布:支持 Zone 管理,提升业务安全性和连续性

悦数图数据库

图数据库 悦数 杭州悦数

和鲸携手暨大经管,为复合型、应用型数据人才培养工作提供最佳实践

ModelWhale

人工智能 数据分析 经管 交叉学科 暨南大学

人工成本高企?华为云耀云服务器L实例打通企业网站开发最后堵着

YG科技

App Cleaner & Uninstaller mac清理卸载工具

iMac小白

六个提升网站开发效率秘诀,最后一个华为云产品绝对值得收藏

平平无奇爱好科技

Vinted、PoshMark、Carousell这些海外二手跨境电商平台如何运营?

Geek_ccdd7f

更强更超值!华为云耀云服务器L实例全新规格诚意来袭

轶天下事

搭建小程序服务器怎么选?闭着选华为云耀云服务器L实例准没错

平平无奇爱好科技

助企业经营花少钱办大事,华为云这款轻量应用服务器开大招了

轶天下事

再次遥遥领先!华为云耀云服务器L实例性能暴涨

轶天下事

HarmonyOS NEXT如何解决不同多媒体技术开发难题

Geek_2d6073

如何使用浏览器自动化框架Playwright开发“万媒易发”实现多平台自动发布文章?

爱写字的阿城

自动化 playwright JavaScrip 浏览器操作

如何在部署中实施实时监控

互联网工科生

部署

双11里最“火爆”轻量应用服务器,华为云耀云服务器L实例打通数字化新动能

轶天下事

拒绝成为红利本身!华为云这款轻量应用服务器助力企业吃透红利

平平无奇爱好科技

引爆双11消费新热潮!华为云高性能轻量应用服务器“C位”耀眼

平平无奇爱好科技

杭州悦数出席 2023 云栖大会计算巢专场,分享云上最佳实践

悦数图数据库

数据库 图数据库 悦数 杭州悦数

Codigger,您团队协作的得力助手

知者如C

极致安全可靠才是王道!华为云这款轻量应用服务器值得相信

轶天下事

彻底远离职场“噩梦”!华为云这款轻量应用服务器保住IT打工人饭碗

平平无奇爱好科技

公司网站建设缺资金缺人手,华为云耀云服务器L实例解困分忧

平平无奇爱好科技

从小白到大神丨快收藏华为云这款小程序开发进阶秘籍!

平平无奇爱好科技

一个工具让你明白“万丈高楼平地起”,拒绝重复造轮子!

伤感汤姆布利柏

编程 程序员 前端 低代码

又一个涵盖前后端+DevOps+OpenAI大模型的高并发项目启动了

冰河

程序员 架构师 即时通讯 项目实战 分布式IM

如何利用罗拉ROLA-IP代理IP提高运营效率和安全性

Geek_bf375d

网站建设超预算?华为云这款轻量应用服务器事半功倍

轶天下事

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