5

深入理解 ASP.NET Core 中间件技术

 8 months ago
source link: https://www.51cto.com/article/770181.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
d25a62f35a880eacc16277b5ce91696bd78ddd.png

什么是ASP.NET Core的中间件技术

在ASP.NET Core中,中间件技术是一种处理HTTP请求和响应的机制。中间件是一个组件,可以在请求到达应用程序之前或响应离开应用程序之前对其进行处理。

中间件可以用于执行各种任务,例如身份验证、授权、日志记录、异常处理等。它们可以按照特定的顺序链式调用,每个中间件都可以对请求或响应进行修改或添加自定义逻辑。

中间件在应用程序的管道中起到桥梁的作用,它们将请求从一个中间件传递到下一个中间件,直到最终到达应用程序。同样,响应也会通过中间件链返回给客户端。

ASP.NET Core中的中间件技术提供了灵活性和可扩展性,使开发人员能够根据需求自定义处理请求和响应的逻辑。中间件可以根据需要添加、删除或重新排序,从而实现不同的应用程序行为。这种模块化的结构使得开发人员能够更好地组织和管理代码,并提高应用程序的性能和可维护性。

ASP.NET Core的中间件技术的用途

ASP.NET Core中的中间件技术用于处理HTTP请求和响应的管道中的组件。中间件是一种在请求到达应用程序之前或响应离开应用程序之后执行的代码。它可以用于执行各种任务,如身份验证、授权、日志记录、异常处理等。

中间件技术的主要用途包括:

  • 身份验证和授权:中间件可以用于验证用户的身份,并根据其权限对请求进行授权。它可以与各种身份验证方案(如Cookie、JWT等)集成,以确保只有经过身份验证的用户可以访问受保护的资源。
  • 路由:中间件可以用于解析URL,并将请求路由到相应的处理程序。它可以根据路由规则将请求映射到不同的控制器和操作方法。
  • 日志记录:中间件可以用于记录应用程序的运行日志。它可以捕获请求和响应的详细信息,并将其记录到日志文件或其他存储介质中,以便后续分析和故障排除。
  • 异常处理:中间件可以用于捕获应用程序中的异常,并根据需要生成适当的响应。它可以捕获未处理的异常,并将其转换为友好的错误页面或错误消息。
  • 压缩和缓存:中间件可以用于压缩响应内容,以减少传输的数据量。它还可以实现HTTP缓存,以提高应用程序的性能和响应速度。

通过使用中间件技术,开发人员可以将应用程序的功能划分为多个可重用的组件,并将它们按照需要组合成管道。这样可以提高代码的可维护性和可扩展性,并使开发人员能够更好地控制请求和响应的处理过程。

ASP.NET Core的中间件技术的核心原理

094eb94213cd45a1a7365327ccfd355f4c1645.png

ASP.NET Core 中间件技术的核心原理是基于管道处理请求和响应的概念,通过一系列的中间件组成管道,对请求进行处理和转换。

  • 管道(Pipeline): ASP.NET Core 应用程序的请求处理管道由一系列的中间件组成。中间件按照特定的顺序依次执行,可以对请求进行处理、修改和扩展。管道的入口是 app.Use() 方法,通过此方法将中间件添加到管道中。
  • 中间件(Middleware): 中间件是一个可调用的组件,负责处理请求并生成响应。每个中间件可以选择性地将请求传递给下一个中间件或者直接返回响应。常见的中间件包括日志记录、异常处理、身份验证等。
  • HttpContext:HttpContext 是 ASP.NET Core 中的核心对象,封装了当前请求的上下文信息,包括请求头、响应头、请求路径等。中间件通过 HttpContext 对象来读取请求信息、修改响应信息,并将请求传递给下一个中间件。
  • 执行顺序:中间件的执行顺序由它们在管道中的位置决定,先添加的中间件先执行。每个中间件可以根据需要将请求传递给下一个中间件,也可以选择直接返回响应。
  • 中间件链:中间件之间通过委托链构成,每个中间件接收到请求后,可以选择将请求传递给下一个中间件或者直接返回响应。委托链的最后一个中间件是 Terminal Middleware,它会返回最终的响应。
  • 异步处理:ASP.NET Core 中间件技术支持异步处理,可以通过 Use(async (context, next) => { ... }) 的方式定义异步中间件。这样可以充分利用系统资源提高并发性能。

总体来说,ASP.NET Core 中间件技术的核心原理是通过管道、中间件和 HttpContext 来处理请求和生成响应。中间件按照顺序执行,可以选择传递请求给下一个中间件或者直接返回响应,从而实现对请求的处理和转换。这种模型灵活且可扩展,使开发人员可以轻松地插入自定义的中间件来满足不同的需求。

如何构造ASP.NET Core的自定义中间件

27772e5062a1b87c3099640d384b4b98d68225.jpg

在 ASP.NET Core 中,可以通过实现 RequestDelegate 委托来构造自定义中间件。以下是构造自定义中间件的步骤:

创建一个类来表示自定义中间件,并添加一个构造函数接受 RequestDelegate 类型的参数。该参数用于将请求传递给下一个中间件。

public class CustomMiddleware
{
    private readonly RequestDelegate _next;

    public CustomMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    public async Task InvokeAsync(HttpContext context)
    {
        // 此处可以在请求处理之前执行一些逻辑

        await _next(context);

        // 此处可以在请求处理之后执行一些逻辑
    }
}

在 CustomMiddleware 类中添加 InvokeAsync 方法。InvokeAsync 方法是中间件的核心逻辑,负责处理请求并将其传递给下一个中间件。

public async Task InvokeAsync(HttpContext context)
{
    // 此处可以在请求处理之前执行一些逻辑

    await _next(context);

    // 此处可以在请求处理之后执行一些逻辑
}

在 Startup.cs 文件的 Configure 方法中使用 app.UseMiddleware<T>() 方法将自定义中间件添加到管道中。确保在需要的位置添加正确定义的自定义中间件。

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    // 省略其他代码...

    app.UseMiddleware<CustomMiddleware>();

    // 省略其他代码...
}

可选:可以在自定义中间件的逻辑中添加一些需要在请求处理之前或之后执行的代码。

例如,在请求处理之前记录日志:

public async Task InvokeAsync(HttpContext context)
{
    // 请求处理之前执行的逻辑
    Log.Information("Processing request...");

    await _next(context);
}

运行应用程序,自定义中间件将按照添加的顺序依次执行,并根据需要进行请求处理和响应生成。

通过以上步骤,你就可以构造自己的 ASP.NET Core 自定义中间件。自定义中间件可以用于执行各种任务,例如身份验证、日志记录、异常处理等。记得在实际开发中根据需求进行适当修改和扩展。

ASP.NET Core的附带有哪些重要的中间件

175e67731398d80af8b524dcc7c2a1a7453122.jpg

ASP.NET Core附带了许多重要的中间件,这些中间件用于处理请求和响应的不同方面。以下是一些重要的中间件:

  • 路由中间件(Routing Middleware):用于确定请求应该由哪个控制器和操作方法处理。它根据请求的URL路径和HTTP方法将请求路由到相应的处理程序。
  • 静态文件中间件(Static Files Middleware):用于提供静态文件,如HTML、CSS、JavaScript和图像等。它可以将静态文件直接返回给客户端,而无需经过控制器处理。
  • 身份验证中间件(Authentication Middleware):用于处理用户身份验证和授权。它可以验证用户的身份,并根据其角色和权限限制访问。
  • 授权中间件(Authorization Middleware):用于检查用户是否具有访问资源的权限。它可以根据用户的角色和权限决定是否允许访问受保护的资源。
  • 异常处理中间件(Exception Handling Middleware):用于处理应用程序中的异常。它可以捕获和处理未处理的异常,并返回适当的错误响应。
  • 日志记录中间件(Logging Middleware):用于记录应用程序的日志。它可以记录请求和响应的详细信息,以便进行故障排除和性能分析。
  • 压缩中间件(Compression Middleware):用于对响应进行压缩,以减少传输的数据量。它可以使用Gzip或Deflate算法对响应进行压缩,从而提高应用程序的性能。

这些中间件是ASP.NET Core框架的核心组成部分,它们提供了丰富的功能和灵活性,可以轻松地构建和扩展Web应用程序。

ASP.NET Core的中间件和过滤器的区别

ASP.NET Core的中间件和过滤器是用于处理请求和响应的两种不同的机制。

中间件是一种在请求管道中处理请求和响应的组件。它可以在请求到达控制器之前或者在响应返回给客户端之前对请求和响应进行处理。中间件可以执行各种任务,例如身份验证、日志记录、异常处理等。中间件是按照顺序应用的,每个中间件都可以选择将请求传递给下一个中间件或者终止请求。中间件是全局的,它们适用于整个应用程序。

过滤器是一种在控制器中处理请求和响应的组件。它可以在控制器的方法执行之前或者之后对请求和响应进行处理。过滤器可以执行各种任务,例如身份验证、授权、日志记录等。过滤器可以应用于整个控制器或者单个控制器的方法。过滤器是局部的,它们只适用于特定的控制器或者方法。

总结起来,中间件是全局的,适用于整个应用程序,而过滤器是局部的,适用于特定的控制器或者方法。中间件和过滤器都可以用于处理请求和响应,但它们的应用方式和范围不同。

ASP.NET Core中间件技术学习资料

以下是一些关于ASP.NET Core中间件技术的链接和示例代码:

ASP.NET Core官方文档:
https://docs.microsoft.com/aspnet/core/fundamentals/middleware/?view=aspnetcore-7.0 - 官方文档提供了关于中间件的详细说明和示例代码。

使用中间件进行身份验证:
https://docs.microsoft.com/aspnet/core/security/authentication/?view=aspnetcore-7.0- 这个链接提供了如何使用中间件进行身份验证的示例代码。

使用中间件进行授权:
https://docs.microsoft.com/aspnet/core/security/authorization/?view=aspnetcore-7.0- 这个链接提供了如何使用中间件进行授权的示例代码。

使用中间件进行日志记录:
https://docs.microsoft.com/aspnet/core/fundamentals/logging/?view=aspnetcore-7.0- 这个链接提供了如何使用中间件进行日志记录的示例代码。

使用中间件进行压缩:
https://docs.microsoft.com/aspnet/core/performance/response-compression?view=aspnetcore-7.0- 这个链接提供了如何使用中间件进行响应压缩的示例代码。

使用中间件进行缓存:
https://docs.microsoft.com/aspnet/core/performance/caching/response?view=aspnetcore-7.0- 这个链接提供了如何使用中间件进行响应缓存的示例代码。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK