中间件按注册顺序执行,用于处理请求响应链,如日志、认证、CORS等。在Program.cs中通过app.Use…方法注册,顺序关键,自定义中间件可用委托或类实现,推荐后者以增强可维护性。

在 .NET Web API 中,中间件(Middleware)是处理 HTTP 请求和响应的核心组件。它按照配置的顺序逐个执行,可以用来实现日志记录、身份验证、异常处理、跨域(CORS)等功能。
中间件的作用与执行流程
中间件位于客户端与控制器之间,形成一个请求处理管道。每个中间件可以选择是否将请求传递给下一个组件,也可以在响应返回时进行处理。
典型的执行顺序如下:
请求进入应用 依次经过注册的中间件(如日志、认证、CORS等) 到达最终的路由或控制器 响应按相反顺序回传
如何注册中间件
在 Program.cs 文件中通过 app.Use... 方法注册中间件。顺序非常重要,因为中间件按注册顺序执行。
示例:添加常用中间件
var builder = WebApplication.CreateBuilder(args);var app = builder.Build();// 启用HTTPS重定向app.UseHttpsRedirection();// 启用跨域资源共享(CORS)app.UseCors(policy => policy.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader());// 启用身份验证(需先配置服务)app.UseAuthentication();app.UseAuthorization();// 使用路由app.UseRouting();app.MapControllers(); // 映射控制器app.Run();
自定义中间件的实现方式
你可以创建自己的中间件来处理特定逻辑,比如记录请求时间、检查请求头等。
有两种常见方式:基于委托和基于类。
方式一:使用委托(简单场景)
app.Use(async (context, next) =>{ Console.WriteLine("请求开始:{0}", context.Request.Path); await next.Invoke(); // 调用下一个中间件 Console.WriteLine("响应完成:{0}", context.Request.Path);});
方式二:使用类(推荐用于复杂逻辑)
创建一个中间件类:
public class RequestLoggingMiddleware{ private readonly RequestDelegate _next; public RequestLoggingMiddleware(RequestDelegate next) { _next = next; } public async Task InvokeAsync(HttpContext context) { Console.WriteLine($"收到请求: {context.Request.Method} {context.Request.Path}"); await _next(context); Console.WriteLine($"响应状态: {context.Response.StatusCode}"); }}
然后扩展方法便于调用:
public static class RequestLoggingExtensions{ public static IApplicationBuilder UseRequestLogging(this IApplicationBuilder builder) { return builder.UseMiddleware(); }}
最后在 Program.cs 中使用:
app.UseRequestLogging();
常见中间件使用建议
CORS:确保在路由之前调用 UseCors() 认证与授权:必须在 MapControllers 前使用 UseAuthentication 和 UseAuthorization 异常处理:开发环境可用 UseDeveloperExceptionPage,生产环境建议用 UseExceptionHandler 静态文件:使用 UseStaticFiles() 提供 wwwroot 下的资源基本上就这些。只要理解了中间件的链式执行机制,并掌握注册顺序的影响,就能灵活控制请求流程。
以上就是.NET Web API中如何使用中间件(Middleware)的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1441332.html
微信扫一扫
支付宝扫一扫