新闻中心

.NET Web API中如何使用中间件(Middleware)_中间件使用配置指南

2025-11-04
浏览次数:
返回列表
中间件是.NET Web API中处理HTTP请求的核心组件,按注册顺序在管道中执行,用于实现日志、认证、授权、CORS等功能。通过UseRouting、UseAuthentication、UseAuthorization等内置中间件及自定义中间件(如请求耗时记录),可构建安全高效的请求处理流程,其中执行顺序至关重要,例如UseRouting必须位于UseAuthorization之前,异常处理中间件应置于开头以捕获全局异常。

.net web api中如何使用中间件(middleware)_中间件使用配置指南

在 .NET Web API 中,中间件(Middleware)是处理 HTTP 请求和响应的核心机制。它位于客户端与控制器之间,按顺序执行,可用于日志记录、身份验证、异常处理、CORS 配置等通用任务。合理使用中间件能提升应用的可维护性和安全性。

中间件的基本概念

中间件是一段代码,用来在请求管道中处理每个进入的 HTTP 请求或响应。它们按注册顺序依次执行,形成一个“管道”。每个中间件可以选择是否将请求传递给下一个组件。

常见内置中间件包括:

  • UseRouting():匹配路由
  • UseAuthentication():启用身份验证
  • UseAuthorization():执行授权策略
  • UseCors():启用跨域资源共享
  • UseExceptionHandler():捕获未处理异常

自定义中间件的创建与使用

你可以编写自己的中间件来实现特定逻辑,比如请求日志、性能监控或请求头检查。

步骤如下:

  1. 创建一个类,包含 Invoke 或 InvokeAsync 方法
  2. 注入所需服务(如 ILogger)
  3. 在 Program.cs 中注册该中间件

示例:记录请求耗时的中间件

public class RequestTimeLoggerMiddleware
{
    private readonly RequestDelegate _next;
    private readonly ILogger<RequestTimeLoggerMiddleware> _logger;
<pre class='brush:php;toolbar:false;'>public RequestTimeLoggerMiddleware(RequestDelegate next, ILogger<RequestTimeLoggerMiddleware> logger)
{
    _next = next;
    _logger = logger;
}

public async Task InvokeAsync(HttpContext context)
{
    var startTime = DateTime.Now;

    await _next(context);

    var duration = DateTime.Now - startTime;
    _logger.LogInformation($"请求 {context.Request.Path} 耗时: {duration.TotalMilliseconds}ms");
}

}

扩展方法封装(推荐做法):

public static class RequestTimeLoggerExtensions
{
    public static IApplicationBuilder UseRequestTimeLogger(this IApplicationBuilder app)
    {
        return app.UseMiddleware<RequestTimeLoggerMiddleware>();
    }
}

在 Program.cs 中配置中间件管道

.NET 6 及以上版本使用 Minimal API 模式,在 Program.cs 中直接配置中间件顺序。

注意:顺序至关重要,例如 UseRouting() 必须在 UseAuthorization() 之前。

Pippit AI Pippit AI

CapCut推出的AI创意内容生成工具

Pippit AI 133 查看详情 Pippit AI

示例配置:

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
<p>app.UseExceptionHandler("/error"); // 异常处理
app.UseCors(policy => policy.AllowAnyOrigin().AllowAnyMethod()); // CORS
app.UseAuthentication(); // 认证
app.UseAuthorization(); // 授权
app.UseRouting(); // 路由解析</p><p>// 使用自定义中间件
app.UseRequestTimeLogger();</p><p>app.MapControllers(); // 映射控制器</p><p>app.Run();</p>

如果中间件只针对特定路径,可以使用 Map 或 UseWhen:

app.Map("/api", apiApp =>
{
    apiApp.UseRequestTimeLogger();
    apiApp.MapControllers();
});

中间件执行顺序的关键原则

中间件的注册顺序决定其执行顺序。以下是一些关键规则:

  • 异常处理中间件应放在最前面,确保能捕获后续中间件抛出的异常
  • UseRouting() 必须在 UseAuthorization() 和 UseAuthentication() 之前
  • 静态文件中间件(UseStaticFiles)通常放在靠前位置,避免不必要的处理
  • MapControllers() 应放在最后,作为终结点

错误示例(顺序错误):

app.UseAuthorization();
app.UseRouting(); // 错误:应在 UseAuthorization 前调用 UseRouting

正确顺序:

app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();

基本上就这些。只要理解中间件的执行流程和顺序依赖,就能灵活构建高效、安全的 Web API 请求处理管道。

以上就是.NET Web API中如何使用中间件(Middleware)_中间件使用配置指南的详细内容,更多请关注其它相关文章!


# ai  # 路由  # 跨域  # .net  # gate  # 放在  # app  # 营销网站建设运营  # 零部件网站seo优化哪家好  # 黄梅seo优化多少钱  # 文化馆营销推广方案模板  # 中小型网站建设免费  # 新乡实力网站优化推荐  # 长乐区软件推广营销价格  # 晋城无障碍关键词排名  # 片区营销推广  # 企业口碑营销推广的方法  # 身份验证  # 自己的  # 游戏开发  # 至关重要  # 发展趋势  # 你在  # 有哪些  # 如何使用  # 自定义 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 顺丰国际快递查询 国际件官方查询入口  4399免费游戏网址入口 4399小游戏免费入口点开即玩  顺丰快件物流信息 官方网站查询入口  J*aScriptWebpack优化_J*aScript构建工具实战  mc.js游戏直达 mc.js网页免下载版本秒进地址  小米14应用无法联网原因分析_小米14网络权限修复  J*a里如何使用forEach遍历Map_Map遍历方法说明  css元素hover动画延迟生效怎么办_使用animation-delay调整触发时间  可靠CSGO开箱平台解析 CSGO开箱网合集  word中如何让数字纵向排列_Word数字纵向排列方法  c++如何使用折叠表达式(Fold Expressions)_c++17可变参数模板新技巧  192.168.1.1管理中心入口 192.168.1.1路由器网页设置平台  外媒分析《GTA6》定价:卖100美元可以但真没必要!  如何使用spryker/configurable-bundles-products-resource-relationship模块解决复杂产品捆绑关系难题  Win11如何开启讲述人功能 Win11屏幕阅读器(讲述人)开启与关闭【教程】  Golang如何实现微服务鉴权与权限控制_Golang微服务鉴权与权限管理实践  CSS布局:解决全屏元素100%尺寸与外边距导致的页面溢出问题  知音漫客官网漫画下载_知音漫客网页版阅读记录  J*aScript对象创建方式_J*aScript设计模式应用  PS5 Pro有点优势但不多! 《燕云十六声》PS5平台与PC性能画面对比  AO3同人作品网入口 AO3搜索引擎官网永久地址  Lar*el递归关系中排除子孙节点的策略  抖音怎么赚钱_抖音创作者变现方法与途径指南  word邮件合并后日期格式不对怎么改_Word邮件合并日期格式修改方法  Lar*el 8 多关键词数据库搜索优化实践  学习通网页版快速入口 学习通官网网页版直接打开  微信语音通话掉线如何解决 微信语音通话稳定优化方法  Basecamp怎样用留言钉固定重点_Basecamp用留言钉固定重点【重点标记】  C++如何实现异步操作_C++11使用std::future和std::async进行异步编程  如何在CSS中使用浮动制作导航栏_float实现水平菜单  创客贴用户入口官网登录 创客贴网页版电脑版系统  MongoDB Aggregation:在嵌套对象数组中精确匹配ObjectId  QQ邮箱登录官网首页 腾讯QQ邮箱网页入口  taptap防沉迷怎么解除 taptap解除健康系统限制说明【2025最新】  最新韩小圈网页版登录入口_官网在线观看官方链接  JUnit5/Mockito:优雅测试内部依赖与异常处理的实践  vivo云服务网页版登录 怎么登录vivo云服务网页版  html5 app怎么运行环境_配html5 app运行环境【教程】  Excel如何用迷你图显趋势_Excel用迷你图显趋势【趋势小图】  J*a TimerTask中HashMap意外清空的深层原因与解决方案  一加Ace 6T实拍样张首次公布!李杰:主摄实力完全看齐4K档性能旗舰  《铁拳8》黑皮辣妹新实机:元气满满的18岁少女!  win11 Snap Layouts怎么用 Win11窗口布局与分屏多任务高效指南【必学】  58动漫网在线官方网 58动漫网正版动漫入口网址  快手官方唯一登录入口 谨防山寨钓鱼网站  晋江读书网页版在线登录 晋江读书电脑版官网  Python实现多节点属性重叠度分析教程  TikTok国际版网页端快速入口 TikTok全球版短视频浏览教程  在Go开发中优雅管理ListenAndServe进程:GoSublime集成方案  汽水音乐在线版入口_汽水音乐网页播放手册 

搜索