在 ASP.NET Core 中创建中间件的 4 种方式

360影视 欧美动漫 2025-03-26 09:43 3

摘要:ASP.NET Core中间件(middleware)是用于处理HTTP请求和响应的组件,它们被安排在请求处理管道中,并按顺序执行。中间件的设计是为了使其在请求处理管道中能够以灵活和可扩展的方式处理 HTTP 请求和响应。

前言

今天大姚带领大家一起来盘点一下在 ASP.NET Core 应用程序中添加和创建中间件的常见的四种方式。

中间件介绍

ASP.NET Core中间件(middleware)是用于处理HTTP请求和响应的组件,它们被安排在请求处理管道中,并按顺序执行。中间件的设计是为了使其在请求处理管道中能够以灵活和可扩展的方式处理 HTTP 请求和响应。

下图显示了 ASP.NET Core MVC 和 Razor Pages 应用的完整请求处理管道:

了解现有中间件的顺序,以及在哪里添加自定义中间件。 你可以完全控制如何重新排列现有中间件,或根据场景需要注入新的自定义中间件。

中间件用途

开发者通过在请求处理管道中添加不同的中间件(Middleware)组件,可以实现应用程序的认证和授权、日志记录、异常处理、静态文件处理、路由和端点映射、CORS(跨域资源共享)、会话管理、请求压缩、国际化和本地化、缓存等各种功能。

通过请求委托添加中间件

我们可以通过在 WebApplication 实例上调用 Use 方法,并提供一个带有两个参数的 lambda 方法来实现。第一个参数是 HttpContext,第二个参数是管道中的实际下一个请求委托。

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build;

app.Use(async (context, next) =>
{
// 在这里处理请求
// ...

await next.Invoke;

// 在这里处理响应
// ...
});

app.Run;
按约定添加中间件

ASP.NET Core中提供了许多内置中间件,例如静态文件中间件、路由、认证、授权中间件等。这些中间件通常已经预先定义好了,开发者只需按照约定调用相应的方法即可。

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build;

// 使用静态文件中间件
app.UseStaticFiles;

// 使用路由中间件
app.UseRouting;

// 使用认证中间件
app.UseAuthentication;

// 使用授权中间件
app.UseAuthorization;

app.Run;
创建自定义中间件类创建自定义中间件类首先我们创建一个自定义中间件类RequestLoggingMiddleware,它将记录每个请求的详细信息。 public class RequestLoggingMiddleware
{
privatereadonlyRequestDelegate _next;

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

public async Task InvokeAsync(HttpContext context)
{
// 记录请求信息
Console.WriteLine($"Request Method: {context.Request.Method}");
Console.WriteLine($"Request Path: {context.Request.Path}");

// 调用下一个中间件
await _next(context);

// 记录响应状态码
Console.WriteLine($"Response Status Code: {context.Response.StatusCode}");
}
}
创建扩展方法

为了方便在应用程序中注册中间件,我们可以创建一个扩展方法。

public static class RequestLoggingMiddlewareExtensions
{
public static IApplicationBuilder UseRequestLogging(this IApplicationBuilder builder)
{
returnbuilder.UseMiddleware;
}
}
在应用程序中使用自定义中间件在Program.cs文件中,使用自定义中间件。 var builder = WebApplication.CreateBuilder(args);
var app = builder.Build;

// 使用自定义中间件
app.UseRequestLogging;

app.Run;
添加基于工厂的中间件

IMiddlewareFactory 是 ASP.NET Core 中用于创建和管理中间件实例的接口。它提供了一种灵活的方式来控制中间件的创建和生命周期管理,特别是在需要复杂依赖注入或条件实例化的场景中。

创建自定义中间件工厂

实现 IMiddlewareFactory 接口的自定义工厂类。

public class CustomMiddlewareFactory(IServiceProvider serviceProvider) : IMiddlewareFactory
{
privatereadonlyIServiceProvider _serviceProvider = serviceProvider;

public IMiddleware? Create(Type middlewareType)
{
// 使用服务提供者创建中间件实例
return_serviceProvider.GetService(middlewareType) as IMiddleware;
}

public void Release(IMiddleware middleware)
{
// 如果需要,可以在这里释放中间件实例(容器负责释放资源)
(middleware as IDisposable)?.Dispose;
}
}
创建自定义中间件

实现 IMiddleware 接口的自定义中间件类。

public class CustomMiddleware : IMiddleware
{
public async Task InvokeAsync(HttpContext context, RequestDelegate next)
{
Console.WriteLine("在这里处理请求.......");

await next(context);

Console.WriteLine("在这里处理响应.......");
}
}
注册中间件和工厂在Program.cs文件中注册自定义中间件和工厂。 var builder = WebApplication.CreateBuilder(args);

// 注册中间件和工厂到依赖注入容器
builder.Services.AddTransient;
builder.Services.AddTransient;

var app = builder.Build;

// 使用基于工厂的中间件
app.UseMiddleware;
app.Run;
最后总结

在ASP.NET Core中添加和创建中间件的方式有很多种,本文列举了四种常见的方式,具体取决于你的需求和偏好。每种方式都有其适用的场景,选择合适的方法可以使您的代码更加简洁和易于维护。

DotNetGuide编程学院

DotNetGuide编程学院是一个专注于C#/.NET/.NET Core学习、工作、面试干货和实战教程分享的知识星球!当然这里不仅仅只有C#/.NET/.NET Core还有前端、云原生(Docker,K8s)、分布式,微服务、实用工具、学习书籍、AIGC、AI赋能、求职和招聘资讯、热点资讯等多个领域,我们致力于构建一个积极向上、和谐友善的.NET技术交流、学习平台。无论您是初学者还是有丰富经验的开发者,我们都希望能为您提供更多的价值和成长机会。

大姚发放了100张DotNetGuide编程学院知识星球68元新人立减优惠券,有兴趣的小伙伴可以领券加入(当前应该是星球最优惠的阶段),加入后如果感觉不值得,3天内知识星球APP右上角退出,直接全额退款,无任何套路!

免费开源的程序员简历模板了解作者&获取更多学习资料程序员常用的开发工具软件推荐加入DotNetGuide技术社区交流群

C#/.NET/.NET Core推荐学习书籍

C#/.NET/.NET Core学习视频汇总

.NET/.NET Core ORM框架资源汇总C#/.NET/.NET Core开发者学习路线集

C#/.NET/.NET Core面试宝典(基础版)

C#/.NET/.NET Core优秀项目和框架推荐

C#/.NET/.NET Core学习、工作、面试指南

学习是一个永无止境的过程,你知道的越多,你不知道的也会越多,在有限的时间内坚持每天多学一点,你一定能成为你想要成为的那个人。不积跬步无以至千里,不积小流无以成江海!

来源:opendotnet

相关推荐