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

在 .NET Web API 中,中间件(Middleware)是处理 HTTP 请求和响应的核心机制。它位于客户端与控制器之间,按顺序执行,可用于日志记录、身份验证、异常处理、CORS 配置等通用任务。合理使用中间件能提升应用的可维护性和安全性。
中间件的基本概念
中间件是一段代码,用来在请求管道中处理每个进入的 HTTP 请求或响应。它们按注册顺序依次执行,形成一个“管道”。每个中间件可以选择是否将请求传递给下一个组件。
常见内置中间件包括:
UseRouting():匹配路由UseAuthentication():启用身份验证UseAuthorization():执行授权策略UseCors():启用跨域资源共享UseExceptionHandler():捕获未处理异常
自定义中间件的创建与使用
你可以编写自己的中间件来实现特定逻辑,比如请求日志、性能监控或请求头检查。
步骤如下:
创建一个类,包含 Invoke 或 InvokeAsync 方法注入所需服务(如 ILogger)在 Program.cs 中注册该中间件
示例:记录请求耗时的中间件
public class RequestTimeLoggerMiddleware{ private readonly RequestDelegate _next; private readonly ILogger _logger;public RequestTimeLoggerMiddleware(RequestDelegate next, ILogger 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(); }}
在 Program.cs 中配置中间件管道
.NET 6 及以上版本使用 Minimal API 模式,在 Program.cs 中直接配置中间件顺序。
注意:顺序至关重要,例如 UseRouting() 必须在 UseAuthorization() 之前。
示例配置:
var builder = WebApplication.CreateBuilder(args);var app = builder.Build();app.UseExceptionHandler("/error"); // 异常处理app.UseCors(policy => policy.AllowAnyOrigin().AllowAnyMethod()); // CORSapp.UseAuthentication(); // 认证app.UseAuthorization(); // 授权app.UseRouting(); // 路由解析
// 使用自定义中间件app.UseRequestTimeLogger();
app.MapControllers(); // 映射控制器
app.Run();
如果中间件只针对特定路径,可以使用 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)_中间件使用配置指南的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1441221.html
微信扫一扫
支付宝扫一扫