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

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

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

前言

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

中间件介绍

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

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

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

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

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

中间件用途

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

通过请求委托添加中间件

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

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

按约定添加中间件

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

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

创建自定义中间件类

创建自定义中间件类

首先我们创建一个自定义中间件类 RequestLoggingMiddleware,它将记录每个请求的详细信息。2RR28资讯网——每日最新资讯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}");        }    }

创建扩展方法

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

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

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

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

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

添加基于工厂的中间件

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

创建自定义中间件工厂

实现 IMiddlewareFactory 接口的自定义工厂类。2RR28资讯网——每日最新资讯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 接口的自定义中间件类。2RR28资讯网——每日最新资讯28at.com

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

注册中间件和工厂

在 Program.cs 文件中注册自定义中间件和工厂。2RR28资讯网——每日最新资讯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中添加和创建中间件的方式有很多种,本文列举了四种常见的方式,具体取决于你的需求和偏好。每种方式都有其适用的场景,选择合适的方法可以使你的代码更加简洁和易于维护。2RR28资讯网——每日最新资讯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

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

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

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

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

标签:
  • 热门焦点
  • 红魔电竞平板评测:大屏幕硬实力

    红魔电竞平板评测:大屏幕硬实力

    前言:三年的疫情因为要上网课的原因激活了平板市场,如今网课的时代已经过去,大家的生活都恢复到了正轨,这也就意味着,真正考验平板电脑生存的环境来了。也就是面对着这种残酷的
  • 天猫精灵Sound Pro体验:智能音箱没有音质?来听听我的

    天猫精灵Sound Pro体验:智能音箱没有音质?来听听我的

    这几年除了手机作为智能生活终端最主要的核心之外,第二个可以成为中心点的产品是什么?——是智能音箱。 手机在执行命令的时候有两种操作方式,手和智能语音助手,而智能音箱只
  • 6月安卓手机性能榜:vivo/iQOO霸占旗舰排行榜前三

    6月安卓手机性能榜:vivo/iQOO霸占旗舰排行榜前三

    2023年上半年已经正式过去了,我们也迎来了安兔兔V10版本,在新的骁龙8Gen3和天玑9300发布之前,性能榜的榜单大体会以骁龙8Gen2和天玑9200+为主,至于那颗3.36GHz的骁龙8Gen2领先
  • 8月总票房已突破10亿!《封神》第一:口碑已经成了

    8月总票房已突破10亿!《封神》第一:口碑已经成了

    8月5日消息,据灯塔专业版数据,截至8月5日9时35分,8月总票房(含预售)已突破10亿。其中,《封神》以大比分的优势领先。根据官方消息,目前该片总票房已经超过14.
  • 三言两语说透设计模式的艺术-简单工厂模式

    三言两语说透设计模式的艺术-简单工厂模式

    一、写在前面工厂模式是最常见的一种创建型设计模式,通常说的工厂模式指的是工厂方法模式,是使用频率最高的工厂模式。简单工厂模式又称为静态工厂方法模式,不属于GoF 23种设计
  • 学习JavaScript的10个理由...

    学习JavaScript的10个理由...

    作者 | Simplilearn编译 | 王瑞平当你决心学习一门语言的时候,很难选择到底应该学习哪一门,常用的语言有Python、Java、JavaScript、C/CPP、PHP、Swift、C#、Ruby、Objective-
  • Python异步IO编程的进程/线程通信实现

    Python异步IO编程的进程/线程通信实现

    这篇文章再讲3种方式,同时讲4中进程间通信的方式一、 Python 中线程间通信的实现方式共享变量共享变量是多个线程可以共同访问的变量。在Python中,可以使用threading模块中的L
  • 一条抖音4亿人围观 ! 这家MCN比无忧传媒还野

    一条抖音4亿人围观 ! 这家MCN比无忧传媒还野

    作者:Hiu 来源:互联网品牌官01 擦边少女空降热搜,幕后推手曝光被网友誉为&ldquo;纯欲天花板&rdquo;的女网红井川里予,近期因为一组哥特风照片登上热搜,引发了一场互联网世界关于
  • 重估百度丨大模型,能撑起百度的“今天”吗?

    重估百度丨大模型,能撑起百度的“今天”吗?

    自象限原创 作者|程心 罗辑2023年之前,对于自己的&ldquo;今天&rdquo;,百度也很迷茫。&ldquo;新业务到 2022 年底还是 0,希望 2023 年出来一个 1。&rdquo;这是2022年底,李彦宏
Top
Baidu
map