架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 29359|回复: 3

[.NET Core] ASP.NET Core 中间件(Middleware)详解

[复制链接]
发表于 2019-9-18 11:35:59 | 显示全部楼层 |阅读模式
什么是中间件(Middleware)?

中间件是组装到应用程序管道中以处理请求和响应的软件。 每个组件:

  • 选择是否将请求传递给管道中的下一个组件。
  • 可以在调用管道中的下一个组件之前和之后执行工作。

请求委托(Request delegates)用于构建请求管道,处理每个HTTP请求。

请求委托使用Run,Map和Use扩展方法进行配置。单独的请求委托可以以内联匿名方法(称为内联中间件)指定,或者可以在可重用的类中定义它。这些可重用的类和内联匿名方法是中间件或中间件组件。请求流程中的每个中间件组件都负责调用流水线中的下一个组件,如果适当,则负责链接短路。

将HTTP模块迁移到中间件解释了ASP.NET Core和以前版本(ASP.NET)中的请求管道之间的区别,并提供了更多的中间件示例。

使用 IApplicationBuilder 创建中间件管道

ASP.NET Core请求流程由一系列请求委托组成,如下图所示(执行流程遵循黑色箭头):
668104-20171031100753449-11207087.png
每个委托可以在下一个委托之前和之后执行操作。委托还可以决定不将请求传递给下一个委托,这称为请求管道的短路。短路通常是可取的,因为它避免了不必要的工作。例如,静态文件中间件可以返回一个静态文件的请求,并使管道的其余部分短路。需要在管道早期调用异常处理委托,因此它们可以捕获后面管道的异常。

最简单的可能是ASP.NET Core应用程序建立一个请求的委托,处理所有的请求。此案例不包含实际的请求管道。相反,针对每个HTTP请求都调用一个匿名方法。


第一个 app.Run 委托终止管道。

有如下代码:


668104-20171031103926902-1631295280.png

通过浏览器访问,发现确实在第一个app.Run终止了管道。

668104-20171031104010746-227449524.png

您可以将多个请求委托与app.Use连接在一起。 next参数表示管道中的下一个委托。 (请记住,您可以通过不调用下一个参数来结束流水线。)通常可以在下一个委托之前和之后执行操作,如下例所示:

使用浏览器访问有如下结果:

668104-20171031105158293-1914555563.png

可以看出请求委托的执行顺序是遵循上面的流程图的。

注意:

响应发送到客户端后,请勿调用next.Invoke。 响应开始之后,对HttpResponse的更改将抛出异常。 例如,设置响应头,状态代码等更改将会引发异常。在调用next之后写入响应体。

可能导致协议违规。 例如,写入超过content-length所述内容长度。

可能会破坏响应内容格式。 例如,将HTML页脚写入CSS文件。

HttpResponse.HasStarted是一个有用的提示,指示是否已发送响应头和/或正文已写入。


内置中间件

ASP.NET Core附带以下中间件组件:


中间件描述
Authentication提供身份验证支持
CORS配置跨域资源共享
Response Caching提供缓存响应支持
Response Compression提供响应压缩支持
Routing定义和约束请求路由
Session提供用户会话管理
Static Files为静态文件和目录浏览提供服务提供支持
URL Rewriting Middleware用于重写 Url,并将请求重定向的支持





上一篇:百度新出产品!一刻相册 目前100万用户可以领取无限存储..
下一篇:英语四六级听力及考研英语词汇复试口语资料分享
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2021-9-22 20:47:00 | 显示全部楼层
学习学习。。。。
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2021-10-10 18:55:42 | 显示全部楼层
学习学习,就位这篇文章开了会员
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2021-10-10 18:59:21 | 显示全部楼层
https://www.cnblogs.com/stulzq/p/7760648.html
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2024-4-24 10:55

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表