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

本文涉及的产品
Serverless 应用引擎免费试用套餐包,4320000 CU,有效期3个月
云原生网关 MSE Higress,422元/月
性能测试 PTS,5000VUM额度
简介: 原文:ASP.NET Core 中间件 - ASP.NET Core 基础教程 - 简单教程,简单编程 ASP.NET Core 中间件 上一章节中,我们我们有讲到 Startup 类中的 Configure() 方法用于定义请求管道中的中间件 ASP.NET Core 中的中间件控制我们的应用程序如何响应 HTTP 请求,它还可以控制我们的应用程序在发生错误时的显示的内容,它是我们认证和授权用户执行特定操作的关键部分 中间件 那么,什么是中间件呢? 中间件是一种装配到应用程序管道以处理请求和响应的组件。

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

ASP.NET Core 中间件

上一章节中,我们我们有讲到 Startup 类中的 Configure() 方法用于定义请求管道中的中间件

ASP.NET Core 中的中间件控制我们的应用程序如何响应 HTTP 请求,它还可以控制我们的应用程序在发生错误时的显示的内容,它是我们认证和授权用户执行特定操作的关键部分

中间件

那么,什么是中间件呢?

中间件是一种装配到应用程序管道以处理请求和响应的组件。

每个组件:

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

请求委托用于生成请求管道。请求委托处理每个 HTTP 请求。

可以使用 RunMapUse 扩展方法来配置请求委托。

可将一个单独的请求委托并行指定为匿名方法 ( 称为并行中间件 ) ,或在可重用的类中对其进行定义

这些可重用的类和并行匿名方法即为中间件或中间件组件

请求管道中的每个中间件组件负责调用管道中的下一个组件,或在适当情况下使链发生短路

中间件处理流程

ASP.NET Core 请求管道包含一系列相继调用的请求委托,如下图所示(执行过程遵循黑色箭头)

每个委托均可在下一个委托前后执行操作。

此外,委托还可以决定不将请求传递给下一个委托,这就是对请求管道进行短路。

通常需要短路,因为这样可以避免不必要的工作。

例如,静态文件中间件可以返回静态文件请求并使管道的其余部分短路。

需要尽早在管道中调用异常处理委托,以便它们可以捕获在管道的后期阶段所发生的异常

我们假设想要记录每个请求的信息,而且想要验证每个请求是否被授权,然后才发送到相应的控制器中去处理

  1. 在这种情况下,安装到应用程序中的第一件中间件可能就是日志记录组件

  2. 记录器可以看到关于传入请求的所有信息,但可能只是记录一些信息, 然后将这个请求传递给下一个中间件

  3. 中间件是这个处理流水线中存在的一系列组件

  4. 安装到应用程序中的下一个中间件是授权组件

  5. 授权组件可能会在 HTTP 标头中寻找特定的 Cookie 信息或访问令牌

  6. 如果授权组件发现令牌有效,则继续传递请求给下一个中间件路由器。如果无效,则可以授权组件本身可能会用HTTP 错误代码或重定向代码来响应请求以将用户引导到到登录页面

  7. 路由器中间件查看 URL 并确定下一步动作

  8. 路由器中间件在应用程序中查找响应的内容,如果路由器没有找到任何响应,则路由器本身可能会返回 404 Not Found 错误

范例

上面的讲解很枯燥,其实真正理解起来很简单,就是流水化的作业

每个新项目默认都会使用 context.Response.WriteAsync 中间件,也就是在 app.Run() 方法中注册的中间件

public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.Run(async (context) => { await context.Response.WriteAsync("Hello World!"); }); } 

app.Run() 方法允许我们传入另一个方法,我们可以用它来处理每一个单独的响应。Run() 方法不经常见,它是调用中间件的终端

app.Run() 方法中注册的中间件永远不会有机会调用另一个中间件,它只会接收请求,然后必须产生某种响应

app.Run() 方法中注册的中间件还可以访问 Response,例如使用 Response 对象返回一个字符串,就前几章节中我们做的那样

如果在 app.Run() 方法之后注册另一个中间件,那么注册的那个中间件永远不会被调用,因为 Run() 方法是注册中间件的 终端,在它之后,永远不会调用下一个中间件

添加另一个中间件

添加另一个中间件的方法很简单,让我们继续以下步骤来添加另一个中间件:

  1. 要添加另一个中间件,右键单击项目并选择 添加 -> 添加 NuGet 包

    如果你使用的是 Windows 系统,则是选择 管理 NuGet 程序包

  2. 在弹出的 添加包管理器中 输入 Microsoft.AspNetCore.Diagnostics

    这个包是一个可以用于异常处理,异常显示页面和诊断信息的 ASP.NET Core 中间件,它包含了我们可以使用的许多不同的中间件

  3. 选中 Microsoft.AspNetCore.Diagnostics 并点击右下脚的 添加包 按钮

    如果你使用的是 Windows 系统,则是选中 Microsoft.AspNetCore.Diagnostics,然后点击右边的 安装 按钮

    如果安装失败,可能是因为你的项目中已经默认安装了该 NuGet 包

    我苹果电脑默认已经安装,所以安装失败,但 Windows 上却安装成功

  4. 然后我们修改 Startup 类中的 Configure() 方法添加中间件 app.UseWelcomePage

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
    
        app.UseWelcomePage();
    
        app.Run(async (context) =>
        {
            var msg = Configuration["message"];
            await context.Response.WriteAsync(msg);
        });
    }
    
  5. 运行 HelloWorld 项目,刷新浏览器,可以看到显示如下

目录
相关文章
|
2月前
|
传感器 数据采集 物联网
探索.NET nanoFramework:为嵌入式设备编程的新途径
探索.NET nanoFramework:为嵌入式设备编程的新途
42 7
|
3月前
|
开发框架 前端开发 .NET
VB.NET中如何利用ASP.NET进行Web开发
在VB.NET中利用ASP.NET进行Web开发是一个常见的做法,特别是在需要构建动态、交互式Web应用程序时。ASP.NET是一个由微软开发的开源Web应用程序框架,它允许开发者使用多种编程语言(包括VB.NET)来创建Web应用程序。
61 5
|
3月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
43 7
|
4月前
|
大数据 开发工具 开发者
从零到英雄:.NET核心技术带你踏上编程之旅,构建首个应用,开启你的数字世界探险!
【8月更文挑战第28天】本文带领读者从零开始,使用强大的.NET平台搭建首个控制台应用。无论你是新手还是希望扩展技能的开发者,都能通过本文逐步掌握.NET的核心技术。从环境搭建到创建项目,再到编写和运行代码,详细步骤助你轻松上手。通过计算两数之和的小项目,你不仅能快速入门,还能为未来开发更复杂的应用奠定基础。希望本文为你的.NET学习之旅开启新篇章!
35 1
|
4月前
|
开发框架 前端开发 中间件
聊聊 ASP.NET Core 中间件(二):中间件和筛选器的区别
聊聊 ASP.NET Core 中间件(二):中间件和筛选器的区别
131 1
|
4月前
|
开发框架 缓存 NoSQL
聊聊 ASP.NET Core 中间件(一):一个简单的中间件例子
聊聊 ASP.NET Core 中间件(一):一个简单的中间件例子
|
4月前
|
开发框架 JSON .NET
ASP.NET Core 标识(Identity)框架系列(三):在 ASP.NET Core Web API 项目中使用标识(Identity)框架进行身份验证
ASP.NET Core 标识(Identity)框架系列(三):在 ASP.NET Core Web API 项目中使用标识(Identity)框架进行身份验证
|
4月前
|
Java Spring 自然语言处理
Spring 框架里竟藏着神秘魔法?国际化与本地化的奇妙之旅等你来揭开谜底!
【8月更文挑战第31天】在软件开发中,国际化(I18N)与本地化(L10N)对于满足不同地区用户需求至关重要。Spring框架提供了强大支持,利用资源文件和`MessageSource`实现多语言文本管理。通过配置日期格式和货币符号,进一步完善本地化功能。合理应用这些特性,可显著提升应用的多地区适应性和用户体验。
43 0
|
4月前
|
传感器 数据采集 物联网
探索未来:.NET nanoFramework引领嵌入式设备编程革新之旅
【8月更文挑战第28天】.NET nanoFramework 是一款专为资源受限的嵌入式设备设计的轻量级、高性能框架,基于 .NET Core,采用 C# 进行开发,简化了传统底层硬件操作的复杂性,极大提升了开发效率。开发者可通过 Visual Studio 或 Visual Studio Code 快速搭建环境并创建项目,利用丰富的库和驱动程序轻松实现从基础 LED 控制到网络通信等多种功能,显著降低了嵌入式开发的门槛。
69 0
|
4月前
|
开发框架 .NET 开发工具
【Azure 应用服务】App Service 的.NET Version选择为.NET6,是否可以同时支持运行ASP.NET V4.8的应用呢?
【Azure 应用服务】App Service 的.NET Version选择为.NET6,是否可以同时支持运行ASP.NET V4.8的应用呢?

相关实验场景

更多
下一篇
无影云桌面