新闻中心
ASP.NET Core 中的自定义中间件如何编写?
自定义中间件用于处理HTTP请求响应逻辑,需包含RequestDelegate构造函数及InvokeAsync方法,通过UseMiddleware注册,可结合DI传递参数或实现IMiddleware接口以支持依赖作用域服务。

在 ASP.NET Core 中,自定义中间件用于处理 HTTP 请求和响应管道中的逻辑,比如日志记录、身份验证、异常处理等。编写自定义中间件非常灵活,可以通过类或内联方法实现,推荐使用类的方式以提高可维护性。
自定义中间件的基本结构
一个典型的中间件类包含以下要素:
- 构造函数接收下一个中间件委托 RequestDelegate
- 必须有一个名为 Invoke 或 InvokeAsync 的公共方法,返回 Task
- 在 Invoke 方法中编写业务逻辑,并调用 _next(context) 继续执行管道
示例:记录请求耗时的中间件
public class RequestTimeMiddleware
{
private readonly RequestDelegate _next;
<pre class="brush:php;toolbar:false;">public RequestTimeMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task InvokeAsync(HttpContext context)
{
var startTime = DateTime.Now;
await _next(context); // 继续执行后续中间件
var endTime = DateTime.Now;
var duration = endTime - startTime;
Console.WriteLine($"请求 {context.Request.Path} 耗时: {duration.TotalMilliseconds}ms");
}}
在程序中注册中间件
要使用自定义中间件,需在 Program.cs 的 UseMiddleware
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
<p>app.UseMiddleware<RequestTimeMiddleware>();</p><p>app.MapGet("/", () => "Hello World!");
app.Run();
传递参数给中间件
如果需要配置选项,可以结合依赖注入传入服务或配置对象。
C#开的网站购物交易系统
一个用C#开的网站购物交易系统,带源码仅供学习参考,应用了WebCalendar控件。后台登陆帐号和密码分别为:admin admin WebCalendar控件是一个ASP.Net Web应用程序的日期控件,您可以通过设置控制控件中不同部分的样式的属性,来自定义 WebCalendar 控件的外观和图片;支持手动输入日期,支持输入时间,不会被TextBox,DropDownList遮挡。并且她是
0
查看详情
public class CustomHeaderMiddleware
{
private readonly RequestDelegate _next;
private readonly string _headerValue;
<pre class="brush:php;toolbar:false;">public CustomHeaderMiddleware(RequestDelegate next, string headerValue)
{
_next = next;
_headerValue = headerValue;
}
public async Task InvokeAsync(HttpContext context)
{
context.Response.Headers["X-Custom-Header"] = _headerValue;
await _next(context);
}}
由于中间件构造函数不能直接接收非服务参数,可通过扩展方法封装:
public static class CustomHeaderExtensions
{
public static IApplicationBuilder UseCustomHeader(
this IApplicationBuilder builder, string value)
{
return builder.UseMiddleware<CustomHeaderMiddleware>(value);
}
}
然后在 Program.cs 中使用:
app.UseCustomHeader("MyValue");
使用工厂模式创建中间件(高级)
若中间件需要依赖作用域服务,可使用 IMiddleware 接口,由容器管理生命周期。
public class ScopedLoggingMiddleware : IMiddleware
{
private readonly ILogger<ScopedLoggingMiddleware> _logger;
<pre class="brush:php;toolbar:false;">public ScopedLoggingMiddleware(ILogger<ScopedLoggingMiddleware> logger)
{
_logger = logger;
}
public async Task InvokeAsync(HttpContext context, RequestDelegate next)
{
_logger.LogInformation("请求开始: {Path}", context.Request.Path);
await next(context);
_logger.LogInformation("请求结束: {Path}", context.Request.Path);
}}
注册时需将中间件类型添加到服务容器:
builder.Services.AddTransient<ScopedLoggingMiddleware>(); // ... app.UseMiddleware<ScopedLoggingMiddleware>();
基本上就这些。自定义中间件是构建可复用请求处理逻辑的核心方式,理解其执行顺序和生命周期有助于写出高效、清晰的管道逻辑。不复杂但容易忽略的是构造函数参数限制和作用域服务的正确使用。
以上就是ASP.NET Core 中的自定义中间件如何编写?的详细内容,更多请关注其它相关文章!
# 相关文章
# 内江营销型企业网站推广
# 东莞seo公司zgmasou
# 宁波链轮厂网站建设
# 全球营销推广
# 银川旅游网站建设
# 武穴seo获客策略
# 大安全网营销推广
# 视频推广网站推荐文案
# 舟山关键词排名怎么设置
# 连云港网络营销推广
# 可以通过
# 帐号
# 中间件
# 您可以
# 仅供
# 她是
# 推荐使用
# 是一个
# 的是
# 自定义
# gate
# .net
# 作用域
# ai
# app
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
html两个JS只运行一个怎么办_让双JS在html中都运行方法【技巧】
Win11怎么查看显卡显存 Win11显示适配器属性及专用视频内存查询
Win11怎么隐藏桌面图标 Win11一键隐藏所有桌面元素及恢复显示
HuggingFaceEmbeddings中向量嵌入维度调整的限制与理解
Excel文件在线转换快速入口 Excel在线格式转换网站
J*aScript数组对象转换:按指定键分组与值收集
漫蛙2正版漫画站 漫蛙2网页版快速访问入口
C++如何使用AddressSanitizer(ASan)_C++调试工具中检测内存访问错误的利器
如何使用spryker/configurable-bundles-products-resource-relationship模块解决复杂产品捆绑关系难题
Windows 11怎么彻底关闭定位_Windows 11服务中禁用Geolocation
Win11怎么设置鼠标指针速度_Win11提高鼠标指针精确度选项
Centos/Linux 系统下安装 composer 的完整步骤
KFC早餐时段怎么领特惠代码_KFC早餐订餐优惠代码获取与使用说明
CSS响应式网页如何实现主次模块比例自适应_flex-grow与flex-shrink调整
mysql如何设置表访问权限_mysql表访问权限配置
抖音DOU+怎么投最有效 抖音付费推广的ROI提升技巧
漫蛙2漫画入口 漫蛙正版网页漫画直达网址
J*aScript打印功能_j*ascript输出控制
TikTok搜索结果不显示如何解决 TikTok搜索刷新优化方法
Win11蓝牙耳机断连怎么解决 Win11蓝牙设置重新配对与驱动更新【技巧】
Golang如何使用const iota_Go iota常量计数器讲解
知音漫客正版漫画平台_知音漫客官网账号登录
win11 arm版怎么安装 M1/M2 Mac虚拟机安装ARM win11的方法
Lar*el 递归关系中排除指定分支的教程
html5 app怎么运行环境_配html5 app运行环境【教程】
12306怎么选座位选到安静区_12306选座安静区域选择策略
4399网页游戏电脑版全新入口 4399电脑端在线玩指南
J*aScript中正确使用querySelectorAll与复杂CSS选择器
PDF文件体积过大处理_PDF压缩技巧详解
Yandex搜索引擎一键访问入口_俄罗斯Yandex官网免登录
必由学登录入口 必由学官方网站在线访问链接
Composer中的^和~符号代表什么_精通Composer版本号语义化约束
J*a里如何实现订单支付与库存同步功能_支付库存同步项目开发方法说明
快手赚钱渠道_快手收益来源
sublime如何配置Go语言开发环境_sublime搭建Golang编译运行系统
蛙漫2台版漫画地址 Manwa2正版网页版链接
J*a编写用户注册与登录功能_掌握字符串与验证逻辑
德邦快递查询平台 德邦快递物流信息查询入口
163邮箱官方主页登录 直达网易邮箱登录核心页面
MongoDB聚合管道:正确匹配对象数组中_id的方法
2026春节假期票务安排_2026春节放假购票指南
Lar*el 8 多关键词数据库搜索优化实践
如何在网页中实现特定地点的随机图片展示
虚幻5科幻题材ARPG大作遭取消!本是《奇异人生》厂商新作
在Go语言中利用后缀数组处理多字符串:实现高效文本匹配与自动补全
163邮箱网页版入口导航平台 163邮箱网页版登录入口官网导航
c++如何使用折叠表达式(Fold Expressions)_c++17可变参数模板新技巧
Win11怎么修改默认浏览器_Windows 11设置Chrome为默认
机构:以往存储涨价周期小米利润率实际上有所改善 能转嫁给消费者等
在J*a中如何使用BigDecimal进行高精度计算_BigDecimal类应用指南


2025-10-28
浏览次数:次
返回列表