介绍
ASP.NET Core 是一种用于构建 Web 应用程序和服务的跨平台框架,支持多种操作系统,包括 Windows、Linux 和 macOS。在 ASP.NET Core 应用程序中,IApplicationBuilder 接口用于配置应用程序的请求管道。
什么是 IApplicationBuilder
IApplicationBuilder 接口用于配置应用程序的请求管道,当您使用 ASP.NET Core 时,您创建的每个 Web 应用程序都从 Startup(或 Startup 扩展)类开始。而在 Startup 类中,IApplicationBuilder 接口用于构建 HTTP 请求处理管道。请求管道是一系列中间件组成的流水线,从客户端请求开始,通过一系列的中间件组件,在最后输出响应内容给客户端。这些中间件组件就可以把任务分为若干阶段,每个阶段根据需求添加对应的中间件组件,构建一个完整的 HTTP 请求处理管道。
use方法简介
use方法是 IApplicationBuilder 接口中的一个方法,它用于将中间件组件添加到 HTTP 请求处理管道中,它具有以下签名:
public static IApplicationBuilder Use(this IApplicationBuilder app,
Func<HttpContext, Func<Task>, Task> middleware);
use方法需要一个中间件组件参数,并应返回一个 IApplicationBuilder 实例。中间件是一个能够接收 HTTP 请求并返回 HTTP 响应的组件。这意味着在中间件世界里,您能够访问 HTTP 请求和响应内容,并进行相应操作。
我们可以通过以下方式来使用 use 方法:
public class Startup
{
public void Configure(IApplicationBuilder app)
{
app.Use(async (context, next) =>
{
await context.Response.WriteAsync("Hello world!");
});
}
}
在上述示例中,我们使用 Use() 方法添加了一个中间件组件。当请求通过管道时,该中间件组件会简单地输出 "Hello world!" 到 HTTP 响应中。
run方法简介
与 use 方法类似,run方法是 IApplicationBuilder 接口中的方法之一。run方法与 use 方法有以下区别:
run方法只接收一个 RequestDelegate 委托类型的参数
run方法是最后一个中间件组件(pipeline)
请求管道(pipeline)将从最后一个中间件组件开始,从而在处理 HTTP 请求时创建一个“逆流”管道。在运行最后一个中间件组件时,管道将根据逆流规则返回响应。在管道最后添加中间件是常见的惯例是使用 run 方法添加一个中间件。以下示例将演示如何使用 run 方法:
public class Startup
{
public void Configure(IApplicationBuilder app)
{
app.Run(async context =>
{
await context.Response.WriteAsync("Hello from Run!");
});
}
}
在上述示例中,我们使用 Run() 方法将一个名为 "Hello from Run!" 的字符串写入到 HTTP 响应中。当管道运行到 Run() 方法时,它将写入字符串,表示该操作为管道中的最后一个中间件组件。
use与run方法的区别
虽然 use 方法和 run 方法均用于在管道中添加中间件组件,但它们各有不同的用法。
use 方法可用于在请求管道中的任何位置添加中间件组件。因为请求管道是按照添加它们的顺序操作的,所以在请求管道中添加中间件组件的位置很重要。
如果我们使用 Use() 方法将一个中间件组件添加到管道中,那么每个请求都会在处理管道其它组件之前通过该中间件。典型用法是使用 Use() 方法添加中间件组件来记录或处理请求的某些方面。
run 方法仅用于管道的末端,为整个管道添加最后一个中间件。在按传入它们的顺序操作期间,管道最后一个中间件组件(pipeline)负责返回 HTTP 响应。因此,run 方法需要返回一个委托类型,它表示管道的最后一个中间件组件。
总结
在本文中,我们介绍了 IApplicationBuilder 接口,并深入了解了 run() 方法和 use() 方法之间的区别。 run() 方法将添加中间件组件作为管道的最后一项,而 use() 方法将添加中间件组件到管道中的任何位置。此外,我们了解了如何使用 use() 和 run() 方法向管道添加自定义中间件组件,以及如何处理 HTTP 请求和响应。加强对 ASP.NET Core 请求管道的理解,将帮助您更好地构建 Web 应用程序。