IApplicationBuilder.Use() 和 IApplicationBuilder.Run() C# Asp.net Core 之间有什么区别?

介绍

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 应用程序。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

后端开发标签