当前位置:首页 > 科技  > 软件

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

来源: 责编: 时间:2024-07-12 17:26:41 256观看
导读前言今天我们一起来盘点一下在ASP.NET Core应用程序中添加和创建中间件常见的四种方式。中间件介绍ASP.NET Core中间件(Middleware)是用于处理HTTP请求和响应的组件,它们被安排在请求处理管道中,并按顺序执行。中间件的设

前言

今天我们一起来盘点一下在ASP.NET Core应用程序中添加和创建中间件常见的四种方式。NFr28资讯网——每日最新资讯28at.com

中间件介绍

ASP.NET Core中间件(Middleware)是用于处理HTTP请求和响应的组件,它们被安排在请求处理管道中,并按顺序执行。中间件的设计是为了使其在请求处理管道中能够以灵活和可扩展的方式处理 HTTP 请求和响应。NFr28资讯网——每日最新资讯28at.com

下图显示了 ASP.NET Core MVC 和 Razor Pages 应用的完整请求处理管道:NFr28资讯网——每日最新资讯28at.com

NFr28资讯网——每日最新资讯28at.com

了解现有中间件的顺序,以及在哪里添加自定义中间件。你可以完全控制如何重新排列现有中间件,或根据场景需要注入新的自定义中间件。NFr28资讯网——每日最新资讯28at.com

图片图片NFr28资讯网——每日最新资讯28at.com

中间件用途

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

通过请求委托添加中间件

我们可以通过在 WebApplication 实例上调用 Use 方法,并提供一个带有两个参数的 lambda 方法来实现。第一个参数是 HttpContext,第二个参数是管道中的实际下一个请求委托。NFr28资讯网——每日最新资讯28at.com

var builder = WebApplication.CreateBuilder(args);            var app = builder.Build();            app.Use(async (context, next) =>            {                // 在这里处理请求                // ...                await next.Invoke();                // 在这里处理响应                // ...            });            app.Run();

按约定添加中间件

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

var builder = WebApplication.CreateBuilder(args);            var app = builder.Build();            // 使用静态文件中间件            app.UseStaticFiles();            // 使用路由中间件            app.UseRouting();            // 使用认证中间件            app.UseAuthentication();            // 使用授权中间件            app.UseAuthorization();            app.Run();

创建自定义中间件类

创建自定义中间件类

首先我们创建一个自定义中间件类 RequestLoggingMiddleware,它将记录每个请求的详细信息。NFr28资讯网——每日最新资讯28at.com

public class RequestLoggingMiddleware    {        private readonly RequestDelegate _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}");        }    }

创建扩展方法

为了方便在应用程序中注册中间件,我们可以创建一个扩展方法。NFr28资讯网——每日最新资讯28at.com

public static class RequestLoggingMiddlewareExtensions    {        public static IApplicationBuilder UseRequestLogging(this IApplicationBuilder builder)        {            return builder.UseMiddleware<RequestLoggingMiddleware>();        }    }

在应用程序中使用自定义中间件

在 Program.cs 文件中,使用自定义中间件。NFr28资讯网——每日最新资讯28at.com

var builder = WebApplication.CreateBuilder(args);            var app = builder.Build();            // 使用自定义中间件            app.UseRequestLogging();            app.Run();

添加基于工厂的中间件

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

创建自定义中间件工厂

实现 IMiddlewareFactory 接口的自定义工厂类。NFr28资讯网——每日最新资讯28at.com

public class CustomMiddlewareFactory(IServiceProvider serviceProvider) : IMiddlewareFactory    {        private readonly IServiceProvider _serviceProvider = serviceProvider;        public IMiddleware? Create(Type middlewareType)        {            // 使用服务提供者创建中间件实例            return _serviceProvider.GetService(middlewareType) as IMiddleware;        }        public void Release(IMiddleware middleware)        {            // 如果需要,可以在这里释放中间件实例(容器负责释放资源)            (middleware as IDisposable)?.Dispose();        }    }

创建自定义中间件

实现 IMiddleware 接口的自定义中间件类。NFr28资讯网——每日最新资讯28at.com

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

注册中间件和工厂

在 Program.cs 文件中注册自定义中间件和工厂。NFr28资讯网——每日最新资讯28at.com

var builder = WebApplication.CreateBuilder(args);            // 注册中间件和工厂到依赖注入容器            builder.Services.AddTransient<CustomMiddleware>();            builder.Services.AddTransient<IMiddlewareFactory, CustomMiddlewareFactory>();            var app = builder.Build();            // 使用基于工厂的中间件            app.UseMiddleware<CustomMiddleware>();            app.Run();

最后总结

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

参考文章

  • https://learn.microsoft.com/zh-cn/aspnet/core/fundamentals/middleware/?view=aspnetcore-8.0
  • https://learn.microsoft.com/zh-cn/aspnet/core/fundamentals/middleware/extensibility?view=aspnetcore-8.0

本文链接:http://www.28at.com/showinfo-26-100737-0.htmlASP.NET Core中创建中间件的几种方式

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 我们一起聊聊设计实时聊天系统的架构

下一篇: 突破与创新:Vue.js 创始人尤雨溪 2024 年度技术前瞻

标签:
  • 热门焦点
  • 卢伟冰长文解析K60至尊版 对Redmi有着里程碑式的意义

    在今天的Redmi后性能时代战略发布会结束之后,Redmi总经理卢伟冰又带来了一篇长文,详解了为什么 Redmi 要开启后性能时代?为什么选择和 MediaTek、Pixelworks 深度合作?以及后性
  • 容量越大越不坏?24万块硬盘故障率报告公布 这些产品零故障

    8月5日消息,云存储服务商Backblaze发布了最新的硬盘故障率报告,年故障率有所上升。Backblaze发布的硬盘季度统计数据,其中包括故障率等重要方面。这些结
  • 0糖0卡0脂 旭日森林仙草乌龙茶优惠:15瓶到手29元

    旭日森林无糖仙草乌龙茶510ml*15瓶平时要卖为79.9元,今日下单领取50元优惠券,到手价为29.9元。产品规格:0糖0卡0脂,添加草本仙草汁,清凉爽口,富含茶多酚,保留
  • 线程通讯的三种方法!通俗易懂

    线程通信是指多个线程之间通过某种机制进行协调和交互,例如,线程等待和通知机制就是线程通讯的主要手段之一。 在 Java 中,线程等待和通知的实现手段有以下几种方式:Object 类下
  • 一文看懂为苹果Vision Pro开发应用程序

    译者 | 布加迪审校 | 重楼苹果的Vision Pro是一款混合现实(MR)头戴设备。Vision Pro结合了虚拟现实(VR)和增强现实(AR)的沉浸感。其高分辨率显示屏、先进的传感器和强大的处理能力
  • Golang 中的 io 包详解:组合接口

    io.ReadWriter// ReadWriter is the interface that groups the basic Read and Write methods.type ReadWriter interface { Reader Writer}是对Reader和Writer接口的组合,
  • 如何正确使用:Has和:Nth-Last-Child

    我们可以用CSS检查,以了解一组元素的数量是否小于或等于一个数字。例如,一个拥有三个或更多子项的grid。你可能会想,为什么需要这样做呢?在某些情况下,一个组件或一个布局可能会
  • .NET 程序的 GDI 句柄泄露的再反思

    一、背景1. 讲故事上个月我写过一篇 如何洞察 C# 程序的 GDI 句柄泄露 文章,当时用的是 GDIView + WinDbg 把问题搞定,前者用来定位泄露资源,后者用来定位泄露代码,后面有朋友反
  • 得物宠物生意「狂飙」,发力“它经济”

    作者|花花小萌主近日,得物宣布正式上线宠物鉴别,通过得物App内的&ldquo;在线鉴别&rdquo;,可找到鉴别宠物的选项。通过上传自家宠物的部位细节,就能收获拥有专业资质认证的得物鉴
Top