ASP.NET Core 中的中间件

ASP.NET Core 中的中间件(Middleware)

在这个节中,我们将了解,ASP.NET Core 中的中间件是 什么?中间件很重要,尤其是在你想当架构师这一条路上。

ASP.NET Core 中的中间件是 什么?

在 ASP.NET Core 中,中间件(Middleware)是一个可以处理 HTTP 请求或响应的软件管道。 ASP.NET Core 中给中间件组件的定位是具有非常特定的用途。例如,我们可能有需要一个中间件组件验证用户,另一个中间件来处理错误,另一个中间件来提供静态文件,如 JavaScript 文件,CSS 文件,图片等等。

我们使用这些中间件组件在 ASP.NET Core 中设置请求处理管道。而正式这管道决定了如何处理请求。 而请求管道是由Startup.cs文件中的Configure()方法进行配置,它也是应用程序启动的一个重要部分。 以下是Configure()方法中的代码。

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }

    app.Run(async (context) =>
    {
        await context.Response.WriteAsync("Hello World!");
    });
}

如您所见, 由空项目模板生成的Configure()方法中的代码中,一个非常简单的请求处理管道中,只有两个中间件。

UseDeveloperExceptionPage是一个中间件,第二个中间件是使用Run()方法设置的。 现在,通过这个非常简单的请求处理管道,我们所有的应用程序都可以将消息写入,然后在由浏览器显示出来。

我们将在下一个视频中详细介绍此方法中的代码。

现在让我们了解什么是中间件以及它在 asp.net Core 中的工作原理。

下图帮助我们了解中间件组件以及它们如何适应请求处理管道

在 ASP.NET Core 中,中间件组件可以同时访问 - 传入请求和传出响应。 因此,中间件组件可以处理传入请求并将该请求,传递给管道中的下一个中间件以进行进一步处理。 例如,如果您有一个日志记录中间件,它可能只是记录请求的时间,它处理完毕后将请求传递给下一个中间件以进行进一步处理。

中间件组件可以处理请求, 并决定不调用管道中的下一个中间件,从而使管道短路,官方微软给了一个英文的名字叫“terminal middleware ”,翻译为“终端中间件”。短路通常是被允许的,因为它可以避免一些不必要的工作。 例如, 如果请求的是像图像或 css 文件这样的静态文件, 则 StaticFiles 中间件可以处理和服务该请求并使管道中的其余部分短路。这个意思就是说,在我们的示例中, 如果请求是针对静态文件, 则 Staticile 中间件不会调用 MVC 中间件,避免一些无谓的操作。

**中间件组件可以通过传入的 HTTP 请求来响应 HTTP 请求。**例如,管道中的mvcmiddleware处理对URL /students的请求并返回学生列表信息。 随着我们在本课程中的进展,在我们即将推出的视频中,我们将演示mvcmiddleware在管道中如何进行请求和响应的。

中间件组件还可以处理传出响应。例如,日志记录中间件组件可以记录响应发送的时间。此外,它还可以通过计算接收请求和响应发送时间之间的差异来计算处理请求所花费的所有时间。

如果你使用过 ABP 框架,它的审计日志功能是怎么设计的,是否有了一些提示呢。

中间件组件是按照添加到管道的顺序进行执行的。所以我们要注意以正确的顺序添加中间件,否则应用程序可能无法按预期运行,哪怕编译成功,但是程序还是会出错。

在我们即将发布的视频中,我们将通过一个示例,讨论如果中间件组件未按正确顺序添加到处理管道中会发生什么。

中间件组件应该用 NuGet 包的形式提供。由 NuGet 处理更新,尽量将中间件拆的足够小,提供每个中间件独立更新的能力。

ABPVNext 就是这样设计的,同样,很多人吼的微服务就是在干这个事情,另外变向说明了,我们很多的架构组就是在开发中间件而已。这些只是我的吐槽,如果你不懂 ABP 和 ABPVnext,也不要紧。以后慢慢学。

根据您的程序要求,您可以向请求处理管道添加尽可能多的中间件组件。例如,如果您正在使用一些静态 HTML 页面和图像,开发简单的 Web 应用程序,那么您的请求处理管道可能只包含“StaticFiles”中间件。 这个就是模块化设计带来的好处,让每个人都像玩积木一样。 另一方面,如果您正在开发一个安全的数据驱动设计的 Web 应用程序,那么您可能需要几个中间件组件,如 StaticFiles 中间件,身份验证中间件,授权中间件,MVC 中间件等。 数据驱动设计,可以简单理解为复杂项目。

我想指出的是,系统是你的,你是系统的架构师, 您可以完全控制请求,处理管道中的配置。这也意味着, 从内存和性能的角度来看, 您只需为请求处理管道中的中间件组件支付流量费和服务器开支就好了。

现在我们已经基本了解了什么是中间件组件以及它们如何适应请求处理管道,在下一个视频中,我们将了解如何使用中间件组件为我们的 ASP.NET Core 应用程序配置请求处理管道。

所以你看当一个架构师,玩好中间件就可以了。戏言而已,不必当真。。。

欢迎添加个人微信号:Like若所思。

欢迎关注我的公众号,不仅为你推荐最新的博文,还有更多惊喜和资源在等着你!一起学习共同进步!

原文地址:https://www.cnblogs.com/cool2feel/p/11451748.html

时间: 2024-11-05 13:29:56

ASP.NET Core 中的中间件的相关文章

在Asp.Net Core中使用中间件保护非公开文件

在企业开发中,我们经常会遇到由用户上传文件的场景,比如某OA系统中,由用户填写某表单并上传身份证,由身份管理员审查,超级管理员可以查看. 就这样一个场景,用户上传的文件只能有三种人看得见(能够访问) 上传文件的人 身份审查人员 超级管理员 那么,这篇博客中我们将一起学习如何设计并实现一款文件授权中间件 问题分析 如何判断文件属于谁 要想文件能够被授权,文件的命名就要有规律,我们可以从文件命名中确定文件是属于谁的,例如本文例可以设计文件名为这样 工号-GUID-[Front/Back] 例如: 1

Asp.Net Core 通过自定义中间件防止图片盗链的实例(转)

一.原理 要实现防盗链,我们就必须先理解盗链的实现原理,提到防盗链的实现原理就不得不从HTTP协议说起,在HTTP协议中,有一个表头字段叫referer,采用URL的格式来表示从哪儿链接到当前的网页或文件.换句话说,通过referer,网站可以检测目标网页访问的来源网页,如果是资源文件,则可以跟踪到显示它的网页地址.有了referer跟踪来源就好办了,这时就可以通过技术手段来进行处理,一旦检测到来源不是本站即进行阻止或者返回指定的页面.如果想对自己的网站进行防盗链保护,则需要针对不同的情况进行区

[转]ASP.NET Core 中的那些认证中间件及一些重要知识点

本文转自:http://www.qingruanit.net/c_all/article_6645.html 在读这篇文章之间,建议先看一下我的 ASP.NET Core 之 Identity 入门系列(一,二,三)奠定一下基础. 有关于 Authentication 的知识太广,所以本篇介绍几个在 ASP.NET Core 认证中会使用到的中间件,还有Authentication的一些零碎知识点,这些知识点对于 ASP.NET 认证体系的理解至关重要. 在 Github 中 ASP.NET C

在ASP.NET Core中编写合格的中间件

这篇文章探讨了让不同的请求去使用不同的中间件,那么我们应该如何配置ASP.NET Core中间件?其实中间件只是在ASP.NET Core中处理Web请求的管道.所有ASP.NET Core应用程序至少需要一个中间件来响应请求,并且您的应用程序实际上只是中间件的集合.当然MVC管道本身就是中间件,早在WebForm时代就出现过HttpModules.HttpHandler.那个时候悠然记得我通过它们来组织我的广告系统,不闲扯我们继续. 每个中间件组件都有一个带有HttpContext参数的Inv

Asp.net core中的websocket

Websocket是html5后的产物,对于asp.net core中也得到了支持,首先在NuGet中添加Microsoft.AspNetCore.WebSockets的引用(现在是1.0.1版本,2017年3月7日发布的). 首先在Configure中添加中间件 //添加websocket中间件 app.UseWebSockets(); 接下来就要定义自己处理websocket的中间件了,代码如下: using Microsoft.AspNetCore.Http; using System;

NLog在asp.net core中的应用

Asp.net core中,自带的Log是在当selfhost运行时,在控制台中输出,不便于查阅,如果用一个log架框,把日志持久化,便于查询. NLog是一个免费的日志记录框架,专门为.net平台下的框架提供日志功能,本文主要说明asp.net core下怎么使用NLog. 首先用Nuget安装NLog.Extensions.Logging和NLog.Web.AspNetCore两个类库. 修改project.json,在publishOptions中添加"nlog.config节点"

Dotnet Core 在ASP.NET Core中使用静态文件

来自微软官网  在ASP.NET Core中使用静态文件:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/static-files: 提供静态文件 静态文件通常位于web root(<content-root> / wwwroot)文件夹中.有关详细信息,请参阅内容根和Web根.您通常将内容根设置为当前目录,以便web root在开发过程中找到项目. public static void Main(string[] args)

ASP.NET Core 中文文档 第三章 原理(1)应用程序启动

原文:Application Startup 作者:Steve Smith 翻译:刘怡(AlexLEWIS) 校对:谢炀(kiler398).许登洋(Seay) ASP.NET Core 为你的应用程序提供了处理每个请求的完整控制.Startup 类是应用程序的入口(entry point),这个类可以设置配置(configuration)并且将应用程序将要使用的服务连接起来.开发人员可以在 Startup 类中配置请求管道,该管道将用于处理应用程序的所有请求. 章节: Startup 类 Co

谈谈ASP.NET Core中的ResponseCaching

前言 前面的博客谈的大多数都是针对数据的缓存,今天我们来换换口味.来谈谈在ASP.NET Core中的ResponseCaching,与ResponseCaching关联密切的也就是常说的HTTP缓存. 在阅读本文内容之前,默认各位有HTTP缓存相关的基础,主要是Cache-Control相关的. 这里也贴两篇相关的博客: 透过浏览器看HTTP缓存 HTTP协议 (四) 缓存 回到正题,对于ASP.NET Core中的ResponseCaching,本文主要讲三个相关的小内容 客户端(浏览器)缓