中间件是ASP.NET Core中处理HTTP请求和响应的核心组件,通过自定义中间件可实现日志记录、身份验证等功能;2. 请求管道由按顺序执行的中间件组成,使用UseMiddleware注册并以InvokeAsync为入口;3. 可通过不调用_next实现短路响应,如拦截特定路径;4. 使用Map或MapWhen可在特定路径或条件下分支管道,如为/admin应用授权中间件;5. 中间件顺序影响执行效果,应合理安排位置以确保功能正确。

在 ASP.NET Core 中,中间件是处理 HTTP 请求和响应的核心组件。通过自定义中间件,你可以拦截请求、修改响应、记录日志、验证身份或执行其他跨切关注点任务。
中间件的基本概念
ASP.NET Core 应用程序的请求管道由一系列中间件组成,每个中间件决定是否将请求传递给下一个组件。中间件按注册顺序依次执行,可以前后串联形成一个处理链。
中间件通常放在独立类中,并通过 UseMiddleware() 方法注册到请求管道。
创建自定义中间件类
编写一个简单的中间件,用于记录请求路径并继续处理:
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("响应已发送"); }}
说明:
RequestDelegate _next:指向管道中的下一个中间件。 InvokeAsync:这是中间件的执行入口,必须是 public 并接受 HttpContext 参数。
注册中间件到请求管道
在 Program.cs 中使用 UseMiddleware 添加中间件:
var builder = WebApplication.CreateBuilder(args);var app = builder.Build();app.UseMiddleware();app.MapGet("/", () => "Hello World");app.Run();
注意中间件的顺序很重要。例如,若将此中间件放在 UseRouting() 之后,则路由信息也可被访问。
短路请求处理
某些中间件可以选择不调用 _next(context),从而提前结束请求:
public async Task InvokeAsync(HttpContext context){ if (context.Request.Path == "/stop") { context.Response.StatusCode = 403; await context.Response.WriteAsync("请求被阻止"); return; // 不再向下传递 } await _next(context);}
这种“短路”机制适用于权限检查、维护模式等场景。
使用 Map 或 MapWhen 分支管道
你可以在特定条件下隔离中间件逻辑:
app.Map("/admin", adminApp =>{ adminApp.UseMiddleware(); adminApp.Run(async context => { await context.Response.WriteAsync("管理员页面"); });});
这样只有访问 /admin 路径时才会应用授权中间件。
基本上就这些。中间件机制灵活且强大,掌握它有助于构建清晰、可维护的 Web 应用结构。
以上就是C# 如何在 ASP.NET Core 中间件中处理请求_C# ASP.NET Core 中间件请求处理教程的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1441314.html
微信扫一扫
支付宝扫一扫