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

幻夢星雲
发布: 2025-11-04 03:57:11
原创
830人浏览过
中间件是.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() 之前。

美间AI
美间AI

美间AI:让设计更简单

美间AI 45
查看详情 美间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)_中间件使用配置指南的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号