C# 如何在 ASP.NET Core 中间件中处理请求_C# ASP.NET Core 中间件请求处理教程

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

c# 如何在 asp.net core 中间件中处理请求_c# asp.net core 中间件请求处理教程

在 ASP.NET Core 中,中间件是处理 HTTP 请求和响应的核心组件。通过自定义中间件,你可以拦截请求、修改响应、记录日志、验证身份或执行其他跨切关注点任务。

中间件的基本概念

ASP.NET Core 应用程序的请求管道由一系列中间件组成,每个中间件决定是否将请求传递给下一个组件。中间件按注册顺序依次执行,可以前后串联形成一个处理链。

中间件通常放在独立类中,并通过 UseMiddleware<T>() 方法注册到请求管道。

创建自定义中间件类

编写一个简单的中间件,用于记录请求路径并继续处理:

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 添加中间件:

PatentPal专利申请写作
PatentPal专利申请写作

AI软件来为专利申请自动生成内容

PatentPal专利申请写作 13
查看详情 PatentPal专利申请写作
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.UseMiddleware<RequestLoggingMiddleware>();

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<AuthMiddleware>();
    adminApp.Run(async context =>
    {
        await context.Response.WriteAsync("管理员页面");
    });
});
登录后复制

这样只有访问 /admin 路径时才会应用授权中间件。

基本上就这些。中间件机制灵活且强大,掌握它有助于构建清晰、可维护的 Web 应用结构。

以上就是C# 如何在 ASP.NET Core 中间件中处理请求_C# ASP.NET Core 中间件请求处理教程的详细内容,更多请关注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号