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 接口上的扩展方法来添加中间件。
默认情况下,新的空项目中有两个中间件 –
- IISP平台处理程序
- 使用 app.Run 注册的中间件
IISP平台处理程序
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 中间件。它不会创建响应,因此它会转到我们的 app.Run 并显示字符串。
第 8 步– 让我们在您的 URL 末尾添加“/ runtimeinfo ”。您现在将看到由该运行时信息页面中间件生成的页面。
您现在将看到一个响应,其中提供有关您的运行时环境的一些信息,例如操作系统、运行时版本、体系结构、类型以及您正在使用的所有包等。