在ASP.NET Core中什么是中间件

  1. 中间件是ASP.NET Core的核心组件
  2. 中间件组成一个管道,整个ASP.NET Core的执行过程就是HTTP请求和响应按照中间件组装的顺序在中间件之间流转的过程。
  3. 中间件由前逻辑、next()、后逻辑3部分组成,前逻辑为第一段要执行的逻辑代码、next为指向下一个中间件的调用、后逻辑为从下一个中间件执行返回所执行的逻辑代码。每个HTTP请求都要经历一系列中间件的处理,每个中间件对于请求进行特定的处理后,再转到下一个中间件,最终的业务逻辑代码执行完成后,响应的内容也会按照处理的相反顺序进行处理,然后形成HTTP响应报文返回给客户端。
  4. 中间件是一种装配到应用管道以处理请求和响应的软件。 每个中间件执行以下任务:

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

ASP.NET Core中有许多内置中间件可以直接使用。也可以在ASP.NET Core应用中根据需要创建自定义中间件。最重要的是,一个给定的ASP.NET Core中间件只专注一个目的:即完成一个职责。

在ASP.NET Core中执行顺序

在ASP.NET Core中,中间件可以访问到的HTTP请求和HTTP响应,所以可以用来:

  1. 通过生成一个HTTP响应来处理HTTP请求
  2. 处理并可以修改HTTP请求,然后将该HTTP请求传给管道上的下一个中间件
  3. 处理并可以修改HTTP响应,并将HTTP响应传递给管道上的下一个中间件或ASP.NET Core应用

ASP.NET Core 中间件的三个概念

Map、Use和Run。Map用来定义一个管道可以处理哪些请求,Use和Run用来定义管道,一个管道由若干个Use和一个Run组成,每个Use引入一个中间件,而Run是用来执行最终的核心应用逻辑。

ASP.NET Core中,使用Use和Run扩展方法来向请求管线中注册行内中间件。Run扩展方法允许我们添加终点中间件(即该中间件后面不会再有中间件了)。另外,Use扩展方法允许我们项请求管线中添加可以继续调用下一个中间件的中间件。

  1. 用Use将多个请求委托链接在一起。 next参数表示管道中的下一个委托。 可通过不调用next参数使管道短路。
  2. Run 委托不会收到 next 参数。 第一个 Run 委托始终为终端,用于终止管道。 Run 是一种约定。 某些中间件组件可能会公开在管道末尾运行的 Run[Middleware]
  3. Map*扩展用作分支管道的约定。
var builder = WebApplication.CreateBuilder(args);
 
var app = builder.Build();

app.Use(async (context, next) =>
{
    await context.Response.WriteAsync("第一个中间件开始");
    await next.Invoke();
    await context.Response.WriteAsync("第一个中间件结束");
});

app.Run(async context =>
{
    await context.Response.WriteAsync("第二个中间件开始");
    await context.Response.WriteAsync("【dotNet疯狂之路】"); 
    await context.Response.WriteAsync("第二个中间件结束");
});
 
app.Run();
> 第一个中间件开始 
> 第二个中间件开始
> 【dotNet疯狂之路】
> 第二个中间件结束
> 第一个中间件结束

ASP.NET Core 常用内置中间件

  1. 异常/错误处理

    • 当应用在开发环境中运行时:

      • 开发人员异常页中间件 (UseDeveloperExceptionPage) 报告应用运行时错误。
      • 数据库错误页中间件 (UseDatabaseErrorPage) 报告数据库运行时错误。
    • 当应用在生产环境中运行时:

      • 异常处理程序中间件 (UseExceptionHandler) 捕获以下中间件中引发的异常。
      • HTTP 严格传输安全协议 (HSTS) 中间件 (UseHsts) 添加 Strict-Transport-Security 标头。
  2. HTTPS 重定向中间件 (UseHttpsRedirection) 将 HTTP 请求重定向到 HTTPS。
  3. 静态文件中间件 (UseStaticFiles) 返回静态文件,并简化进一步请求处理。
  4. Cookie 策略中间件 (UseCookiePolicy) 使应用符合欧盟一般数据保护条例 (GDPR) 规定。
  5. 用于路由请求的路由中间件 (UseRouting)。
  6. 身份验证中间件 (UseAuthentication) 尝试对用户进行身份验证,然后才会允许用户访问安全资源。
  7. 用于授权用户访问安全资源的授权中间件 (UseAuthorization)。
  8. 会话中间件 (UseSession) 建立和维护会话状态。 如果应用使用会话状态,请在 Cookie 策略中间件之后和 MVC 中间件之前调用会话中间件。
var builder = WebApplication.CreateBuilder(args);
 
var app = builder.Build();
  
if (app.Environment.IsDevelopment())

    app.UseDeveloperExceptionPage();//开发人员异常页中间件
    app.UseDatabaseErrorPage();//数据库错误页中间件
}
else
{
    app.UseExceptionHandler("/Error");//异常处理程序中间件
    app.UseHsts();//HTTP 严格传输安全协议 (HSTS) 中间件
}
app.UseHttpsRedirection();//HTTPS 重定向中间件
app.UseStaticFiles();//静态文件中间件
app.UseCookiePolicy();// Cookie 策略中间件
app.UseRouting();//用于路由请求的路由中间件
app.UseAuthentication();//身份验证中间件
app.UseAuthorization();//用于授权用户访问安全资源的授权中间件
app.UseSession();//会话中间件
  
app.Run();

ASP.NET Core中间件之理解的更多相关文章

  1. [转]ASP.NET Core 中间件详解及项目实战

    本文转自:http://www.cnblogs.com/savorboard/p/5586229.html 前言 在上篇文章主要介绍了DotNetCore项目状况,本篇文章是我们在开发自己的项目中实际 ...

  2. 如何一秒钟从头构建一个 ASP.NET Core 中间件

    前言 其实地上本没有路,走的人多了,也便成了路. -- 鲁迅 就像上面鲁迅说的那样,其实在我们开发中间件的过程中,微软并没有制定一些策略或者文档来约束你如何编写一个中间件程序, 但是其中却存在者一些最 ...

  3. ASP.NET Core 入门教程 9、ASP.NET Core 中间件(Middleware)入门

    一.前言 1.本教程主要内容 ASP.NET Core 中间件介绍 通过自定义 ASP.NET Core 中间件实现请求验签 2.本教程环境信息 软件/环境 说明 操作系统 Windows 10 SD ...

  4. ASP.NET Core 中间件基本用法

    ASP.NET Core 中间件 ASP.NET Core的处理流程是一个管道,而中间件是装配到管道中的用于处理请求和响应的组件.中间件按照装配的先后顺序执行,并决定是否进入下一个组件.中间件管道的处 ...

  5. (4)ASP.NET Core 中间件

    1.前言 整个HTTP Request请求跟HTTP Response返回结果之间的处理流程是一个请求管道(request pipeline).而中间件(middleware)则是一种装配到请求管道以 ...

  6. ASP.NET Core 中间件 - ASP.NET Core 基础教程 - 简单教程,简单编程

    原文:ASP.NET Core 中间件 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 中间件 上一章节中,我们我们有讲到 Startup 类中的 Confi ...

  7. ASP.NET Core 入门笔记10,ASP.NET Core 中间件(Middleware)入门

    一.前言 1.本教程主要内容 ASP.NET Core 中间件介绍 通过自定义 ASP.NET Core 中间件实现请求验签 2.本教程环境信息 软件/环境 说明 操作系统 Windows 10 SD ...

  8. ASP.NET Core 中间件的使用(二):依赖注入的使用

    写在前面 上一篇大家已经粗略接触了解到.NET Core中间件的使用:ASP .Net Core 中间件的使用(一):搭建静态文件服务器/访问指定文件, .NET Core框架中很多核心对象都是通过依 ...

  9. ASP.NET Core 中间件 自定义全局异常中间件以及 MVC异常过滤器作用

    中间件是一种装配到应用管道以处理请求和响应的软件. 每个组件: 选择是否将请求传递到管道中的下一个组件. 可在管道中的下一个组件前后执行工作. 请求委托用于生成请求管道. 请求委托处理每个 HTTP ...

  10. ASP.NET Core中间件初始化探究

    前言 在日常使用ASP.NET Core开发的过程中我们多多少少会设计到使用中间件的场景,ASP.NET Core默认也为我们内置了许多的中间件,甚至有时候我们需要自定义中间件来帮我们处理一些请求管道 ...

随机推荐

  1. 【第5篇】AI语音简介

    1.3  AI语音简介 AI语音既人工智能语音技术,以语音识别技术为开端,实现人机语言的通信,包括语音识别技术(ASR).自然语言处理技术(NLP)和语音合成技术(TTS).通俗点说就是通过语音这个媒 ...

  2. Arch Linux + KDE 配置&美化(持续更新~)

    Arch Linux + KDE 配置&美化(持续更新~) 这篇文章着重记录archlinux + KDE的一个基本的配置过程.不包括安装过程(使用archInstall.sh).内容大概有以 ...

  3. Nginx的概述和配置

    一.Nginx概述 1.1Nginx的特点 (1)一款高性能.轻量级web服务 稳定性高 系统资源消耗低高 对HTTP并发连接的处理能力 (2)单台物理服务器可支持30000~50000个并发请求 1 ...

  4. 浅谈HTTP缓存与CDN缓存的那点事

    HTTP缓存与CDN缓存一直是提升web性能的两大利器,合理的缓存配置可以降低带宽成本.减轻服务器压力.提升用户的体验.而不合理的缓存配置会导致资源界面无法及时更新,从而引发一系列的衍生问题.本文将分 ...

  5. 春秋云境 CVE-2022-24663复现

    靶标介绍: 远程代码执行漏洞,任何订阅者都可以利用该漏洞发送带有"短代码"参数设置为 PHP Everywhere 的请求,并在站点上执行任意 PHP 代码.P.S. 存在常见用户 ...

  6. OSError: dlopen() failed to load a library: cairo / cairo-2 / cairo-gobject-2 / cairo.so.2

    解决办法 下载 gtk3-runtime-3.24.29-2021-04-29-ts-win64.exe后安装. 记得勾选添加bin目录到环境变量: 这样就不会缺失dll了,当然可能需要重启IDE才能 ...

  7. 关于解决Failed on cp file to /system - Cross-device link 报错

    前言 在adb shell中移动 android_server时候遇到了这个报错 解决办法 采用 cp 命令代替 mv 命令

  8. C++ 之 宏定义

    宏在 C 语言中非常重要,但在 C++ 中却无甚大用,普遍的共识:尽量避免使用宏 C++ 之父 Bjarne 在<C++ Programming Language>中写到 Avoid ma ...

  9. 数电第8周周结_by_yc

    基本知识: 1.有限状态机的分类: Moore型:输出仅与电路的状态有关: Mealy型:输出与当前电路状态和当前电路输入有关. 2.有限状态机的描述方法: 状态转换图:节点:状态(Moore输出): ...

  10. python中的数学函数