- ASP.NET Core 教程
- ASP.NET Core - 主页
- ASP.NET Core - 概述
- ASP.NET Core - 环境设置
- ASP.NET Core - 新项目
- ASP.NET Core - 项目布局
- ASP.NET Core - Project.Json
- ASP.NET Core - 配置
- ASP.NET Core - 中间件
- ASP.NET Core - 异常
- ASP.NET Core - 静态文件
- ASP.NET Core - 设置 MVC
- ASP.NET Core - MVC 设计模式
- ASP.NET Core - 路由
- ASP.NET Core - 属性路由
- ASP.NET Core - 行动结果
- ASP.NET Core - 视图
- 设置实体框架
- ASP.NET Core - DBContext
- ASP.NET Core - Razor 布局视图
- ASP.NET Core - Razor 视图启动
- ASP.NET Core - Razor 视图导入
- ASP.NET Core - Razor 标签助手
- ASP.NET Core - Razor 编辑表单
- ASP.NET Core - 身份概述
- ASP.NET Core - 授权属性
- 身份配置
- ASP.NET Core - 身份迁移
- ASP.NET Core - 用户注册
- ASP.NET Core - 创建用户
- ASP.NET Core - 登录和注销
- ASP.NET Core 有用资源
- ASP.NET Core - 快速指南
- ASP.NET Core - 有用的资源
- ASP.NET Core - 讨论
ASP.NET Core - 中间件
在本章中,我们将了解如何设置中间件。ASP.NET Core 中的中间件控制我们的应用程序如何响应 HTTP 请求。它还可以控制我们的应用程序在出现错误时的外观,并且它是我们如何验证和授权用户执行特定操作的关键部分。
中间件是组装到应用程序管道中以处理请求和响应的软件组件。
每个组件选择是否将请求传递给管道中的下一个组件,并且可以在调用管道中的下一个组件之前和之后执行某些操作。
请求委托用于构建请求管道。请求委托处理每个 HTTP 请求。
ASP.NET Core 中的每个中间件都是一个对象,并且每个中间件都有非常具体、集中且有限的作用。
最终,我们需要许多中间件才能使应用程序正常运行。
现在假设我们想要将每个请求的信息记录到我们的应用程序中。
在这种情况下,我们可能安装到应用程序中的第一个中间件是日志记录组件。
该记录器可以看到有关传入请求的所有信息,但记录器很可能只是记录一些信息,然后将此请求传递给下一个中间件。
中间件是该处理管道中存在的一系列组件。
我们安装到应用程序中的下一个中间件是授权者。
授权者可能会在 HTTP 标头中查找特定的 cookie 或访问令牌。
如果授权者找到令牌,则允许请求继续进行。如果没有,授权者本身可能会使用 HTTP 错误代码或重定向代码来响应请求,以将用户发送到登录页面。
但是,否则,授权者会将请求传递给下一个中间件,即路由器。
路由器会查看 URL 并确定您的下一步操作。
路由器会在应用程序中查找要响应的内容,如果路由器没有找到要响应的内容,则路由器本身可能会返回404 Not Found 错误。
例子
现在让我们通过一个简单的例子来更多地了解中间件。我们使用Startup 类的 Configure 方法在 ASP.NET 中设置中间件。
using Microsoft.AspNet.Builder; using Microsoft.AspNet.Hosting; using Microsoft.AspNet.Http; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Configuration; namespace FirstAppDemo { public class Startup { public Startup() { var builder = new ConfigurationBuilder() .AddJsonFile("AppSettings.json"); Configuration = builder.Build(); } public IConfiguration Configuration { get; set; } // This method gets called by the runtime. // Use this method to add services to the container. // For more information on how to configure your application, // visit http://go.microsoft.com/fwlink/?LinkID=398940 public void ConfigureServices(IServiceCollection services) { } // This method gets called by the runtime. // Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app) { app.UseIISPlatformHandler(); app.Run(async (context) => { var msg = Configuration["message"]; await context.Response.WriteAsync(msg); }); } // Entry point for the application. public static void Main(string[] args) => WebApplication.Run<Startup>(args); } }
在Configure()方法中,我们将调用IApplicationBuilder接口上的扩展方法来添加中间件。
默认情况下,新的空项目中有两个中间件 -
- IIS平台处理程序
- 使用 app.Run 注册的中间件
IIS平台处理程序
IISPlatformHandler允许我们使用 Windows 身份验证。它将查看每个传入请求并查看是否有与该请求关联的任何 Windows 身份信息,然后调用下一个中间件。
使用 app.Run 注册的中间件
在本例中,下一个中间件是通过app.Run注册的中间件。Run 方法允许我们传入另一个方法,我们可以用它来处理每个响应。Run 并不是您经常看到的东西,它是我们所说的终端中间件。
您在 Run 中注册的中间件永远不会有机会调用另一个中间件,它所做的只是接收请求,然后必须产生某种响应。
您还可以访问 Response 对象,并且可以使用 Response 对象执行的操作之一是写入字符串。
如果您想在 app.Run 之后注册另一个中间件,那么该中间件将永远不会被调用,因为 Run 是一个终端中间件。它永远不会调用下一个中间件。
如何添加另一个中间件
让我们继续执行以下步骤来添加另一个中间件 -
步骤 1 - 要添加另一个中间件,请右键单击项目并选择管理 NuGet 包。
步骤 2 - 搜索Microsoft.aspnet.diagnostics,它实际上是 ASP.NET Core 中间件,用于异常处理、异常显示页面和诊断信息。这个特定的包包含我们可以使用的许多不同的中间件。
步骤 3 - 如果您的项目中未安装该软件包,请安装该软件包。
步骤 4 - 现在让我们转到Configure()方法并调用app.UseWelcomePage中间件。
// This method gets called by the runtime. // Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app) { app.UseIISPlatformHandler(); app.UseWelcomePage(); app.Run(async (context) => { var msg = Configuration["message"]; await context.Response.WriteAsync(msg); }); }
步骤 5 - 运行您的应用程序,您将看到以下欢迎屏幕。
此欢迎屏幕可能没有那么有用。
步骤 6 - 让我们尝试一些可能更有用的东西。我们将使用 RuntimeInfoPage 来代替欢迎页面。
// This method gets called by the runtime. // Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app) { app.UseIISPlatformHandler(); app.UseRuntimeInfoPage(); app.Run(async (context) => { var msg = Configuration["message"]; await context.Response.WriteAsync(msg); }); }
步骤 7 - 保存Startup.cs页面并刷新浏览器,您将看到以下页面。
此RuntimeInfoPage是一个中间件,仅响应针对特定 URL 传入的请求。如果传入的请求与该 URL 不匹配,则该中间件只会让请求传递到下一个中间件。请求会经过IISPlatformHandler中间件,然后转到UseRuntimeInfoPage中间件。它不会创建响应,因此它将转到我们的应用程序。运行并显示字符串。
步骤 8 - 让我们在 URL 末尾添加“/ runtimeinfo ”。您现在将看到由该运行时信息页面中间件生成的页面。
现在,您将看到一个响应,其中提供了有关运行时环境的一些信息,例如操作系统、运行时版本、体系结构、类型以及您正在使用的所有包等。