在本章中,我们将了解如何设置中间件. ASP.NET Core中的中间件控制我们的应用程序如何响应HTTP请求.它还可以控制应用程序在出现错误时的外观,并且它是我们如何验证和授权用户执行特定操作的关键部分.
中间件是组装到应用程序管道中以处理请求和响应的软件组件.
每个组件选择是否通过请求到管道中的下一个组件,并且可以在管道中调用下一个组件之前和之后执行某些操作.
使用请求委托构建请求管道.请求委托处理每个HTTP请求.
ASP.NET Core中的每个中间件都是一个对象,每个部分都有一个非常具体的,专注的,并且有限的角色.
最终,我们需要许多中间件才能让应用程序正常运行.
现在让我们假设我们要将有关每个请求的信息记录到我们的应用程序中.
在这种情况下,我们可能安装到应用程序中的第一个中间件是日志记录组件.
此记录器可以查看有关传入请求的所有内容,但是记录器可能只是记录一些信息,然后将这个请求传递给下一个中间件.
中间件是一系列组件存在于这个处理流程中.
我们在应用程序中安装的下一个中间件是授权人.
授权者可能会在HTTP标头中查找特定的cookie或访问令牌.
如果授权人找到令牌,它会允许请求继续.如果没有,也许授权者本身将使用HTTP错误代码或重定向代码来响应请求以将用户发送到登录页面.
但是,否则,授权者会将请求传递给下一个作为路由器的中间件.
路由器查看URL并确定下一步操作.
路由器查看应用程序是否有响应的内容,如果路由器找不到任何响应,路由器本身可能会返回 404未找到错误.
现在让我们来看看简单的例子来了解有关中间件的更多信息我们使用我们的Startup class.的配置方法在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接口添加中间件.
默认情况下,新的空项目中有两个中间件 :
IISPlatformHandler
Middleware registered with app.Run
IISPlatformHandler 允许我们使用Windows身份验证.它会查看每个传入的请求,看看是否有与该请求相关的Windows身份信息,然后它会调用下一个中间件.
在这种情况下,下一个中间件是一个用 app.Run 注册的中间件. Run方法允许我们传入另一个方法,我们可以使用它来处理每个响应.运行不是你经常会看到的东西,它是我们称之为终端中间件的东西.
你在Run注册的中间件将永远不会有机会调用另一块中间件,它只是接收一个请求,然后它必须产生某种响应.
你也可以访问一个Response对象,你可以使用一个响应对象是写一个字符串.
如果你想在app.Run之后注册另一个中间件,那个中间件永远不会被调用,因为再次,Run是一个终端片中间件.它永远不会调用下一个中间件.
让我们继续以下步骤添加另一个中间件&minus ;
第1步 : 要添加另一个中间件,请右键单击项目并选择Manage NuGet Packages.
步骤2 : 搜索 Microsoft.aspnet.diagnostics ,它实际上是用于异常处理,异常显示页面和诊断信息的ASP.NET核心中间件.这个特殊的软件包包含许多我们可以使用的不同中间件.
第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中间件.它不会创建响应,因此它将转到我们的app.Run并显示字符串.
步骤8 : 让我们在您的URL末尾添加"/ runtimeinfo ".您现在将看到由该运行时信息页面中间件生成的页面.
现在,您将看到一个响应,它为您提供有关运行时环境的一些信息,例如操作系统,运行时版本,体系结构,类型以及您正在使用的所有软件包等.