12.ASP.NET Core 中间件组件
这篇文章中,我将带领大家一起详细学习:ASP.NET Core Middleware Components.这篇文章中,我将详细讨论下面几个问题:
- 什么是ASP.NET Core 中的中间件组件?
- ASP.NET Core应用程序中,在哪里来使用中间件组件?
- 怎样来配置ASP.NET Core 应用程序中的中间件组件?
- 使用中间件组件的例子有哪些?
- ASP.NET Core应用程序中,中间件组件执行的顺序是?
什么是ASP.NET Core中间件组件?
ASP.NET Core中间件组件就是组装到应用程序中,处理HTTP请求和响应的软件组件(C# Classes)。每一个中间件组件执行下面的任务:
- 选择是否将HTTP请求传递给管道中的下一个组件
- 可以在管道中的下一个组件之前和之后执行工作
在ASP.NET Core中,已经有很多中间件组件,你可以直接拿去使用了。如果你愿意,还可以创建自己的中间件组件。你需要特别记住的一点就是:在ASP.NET Core 中一个中间件组件只做一个特定的事情。
在ASP.NET Core应用程序中,我们在哪里使用中间件组件呢?
下面是一些在ASP.NET Core应用程序中使用中间件组件的例子:
- 我们可能有一个中间件组件,用于用户身份验证
- 另外的中间件组件,用来记录请求和响应
- 同样,我们还有中间件组件用来处理异常
- 我们可能有中间件组件,来处理静态文件,例如:images、javascript、或者css文件等等
- 可能还有一个中间件组件,用来授权用户可以访问特定的资源
中间件组件是我们在ASP.NET Core中用来处理请求管道的组件。如果你了解过之前版本的.NET Framework,你就会知道,我们是使用Http Handlers和Http Moudles来处理请求和响应的。并且这两个将决定如何处理HTTP请求和响应。
怎样在ASP.NET Core应用程序中配置中间件组件?
在ASP.NET Core应用程序中,你需要使用Startup类文件中的Configure方法来配置中间件组件。这个Statrup在程序启动的时候,会执行。我们打开之前用空模板建的ASP.NET Core应用程序:
因此,不管你啥时候想要配置中间件组件,你都需要在Configure方法中,调用IApplicationBulider接口的UseXXX方法。在上面的图片中,你可以看到,使用了UseDeveloperExceptionPage中间件组件。
在接下来的文章中,我将详细介绍这个中间件组件。现在我们来好好理解一下,什么是中间件组件,以及它们如何工作的。
理解ASP.NET Core中的中间件组件
下面的图片解释了什么是中间件组件,以及它们怎么用在ASP.NET Core请求处理管道中的。
在ASP.NET Core应用程序中,中间件组件可以同时获取传入的HTTP请求以及传出的HTTP响应。所以一个中间件组件可以做下面的事情:
- 处理HTTP请求,生成HTTP响应
- 处理HTTP请求,修改请求,并传递给下一个中间件组件
- 处理HTTP响应,修改响应,传递给下一个中间件组件或者传递给ASP.NET Core Web服务器
使用中间件组件的例子
上面的图片中,我们看到有了一个日志记录的中间件组件。这个组件是简单的记录请求的时间,并且将其传递给下一个中间件组件。也就是静态文件中间件组件,来做进一步的处理。
ASP.NET Core中的中间件组件,可能同样处理HTTP请求,并生成响应报文。ASP.NET Core中间件组件,同样可以选择,不去调用下一个中间件组件。这个概念称为请求管道短路。
例如,我们有一个静态文件的中间件组件,如果有请求,要获取静态文件,静态文件中间件组件就会去处理这个请求。处理完之后,静态文件中间件组件,不传递给下一个中间件组件(MVC中间件组件),这就称为请求管道短路。
我们已经知道了,ASP.NET Core中间件组件可以同时获取HTTP请求和HTTP响应。所以中间件组件也可以处理传出的响应。例如,日志组件可能记录时间,然后这个发送响应给客户端。
什么是中间件组件执行的顺序?
理解中间件组件执行的顺序非常重要!ASP.NET Core中间件组件执行的顺序,就是按照他们添加的顺序来的。所以我们需要格外注意,添加中间件的时候的顺序。
作为应用程序业务的需要,你可能会添加很多的中间件组件。例如,如果你开发静态文件的网站,那么你就需要静态中间件组件。
但是如果你开发动态的数据驱动的网站程序,那么你可能会添加,诸如:日志中间件、身份验证中间件、授权中间件、MVC中间件等等。
在我们下篇文章中,我将详细介绍如何配置中间件组件。这篇文章,只是介绍了中间件组件的一些常用概念,希望你能理解!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2019-04-06 9.4 翻译系列:EF 6以及 EF Core中的NotMapped特性(EF 6 Code-First系列)
2019-04-06 9.3 翻译系列:数据注解特性之Key【EF 6 Code-First 系列】