柏虎资源网

专注编程学习,Python、Java、C++ 教程、案例及资源

5行代码搞定ASP.NET Core中间件!从入门到实战

每次开发Web应用时,是不是总遇到这些需求:记录所有请求日志、验证API访问权限、统一处理异常?这些重复劳动其实用中间件5行代码就能搞定!今天就带大家从0到1理解ASP.NET Core中间件,亲手写一个能直接用的自定义管道。

一、中间件到底是个啥?用"餐厅流水线"讲明白

中间件(Middleware)是ASP.NET Core处理请求的"流水线工人"。想象你去餐厅点餐:

  • 请求就像"点单",从门口(第一个中间件)传到后厨(最后一个中间件)
  • 响应就像"上菜",从后厨反向传回到门口
  • 每个中间件可以"加工"请求(比如记录点单内容)、"拦截"异常(比如发现没食材直接告知顾客),或者"放行"给下一个中间件


▲ 中间件流水线:请求从左到右,响应从右到左,形成"U型"处理流程

二、5行代码实现!记录请求日志的中间件

废话不多说,直接上代码!假设我们要记录每个请求的访问时间和路径,只需5行核心代码:

var app = WebApplication.Create();  // 1. 创建Web应用
app.Use(async (context, next) => {  // 2. 添加自定义中间件
    Console.WriteLine(#34;[{DateTime.Now:HH:mm:ss}] 访问了:{context.Request.Path}");  // 记录日志
    await next();  // 3. 传给下一个中间件
});
app.MapGet("/", () => "Hello World!");  // 4. 定义默认接口
app.Run();  // 5. 启动应用

代码解析:

  • 第1行:创建ASP.NET Core应用实例
  • 第2-3行Use方法添加中间件,context包含请求信息,next()是"传话筒",告诉下一个中间件"该你了"
  • 第4行:定义根路径/的响应内容
  • 第5行:启动应用,监听请求

运行后访问http://localhost:5000,控制台会输出:
[14:30:25] 访问了:/


▲ 中间件运行效果:每次请求都会自动记录日志

三、实战:3个常用中间件场景,直接抄作业

1. API Key认证:防止接口被恶意调用

很多API需要密钥才能访问,用中间件10行代码搞定:

app.Use(async (context, next) => {
    // 从请求头获取API Key
    if (!context.Request.Headers.TryGetValue("X-API-Key", out var apiKey) 
        || apiKey != "MY_SECRET_KEY") {  // 换成你的密钥
        context.Response.StatusCode = 401;  // 未授权
        await context.Response.WriteAsync("API Key错误!");
        return;  // 拦截请求,不再传给下一个中间件
    }
    await next();  // 密钥正确,放行
});

2. 跨域处理:让前端能调用你的API

前后端分离项目必用!ASP.NET Core内置CORS中间件,一句话开启:

app.UseCors(policy => policy.AllowAnyOrigin().AllowAnyHeader());  // 开发环境用,生产环境限制域名

3. 异常处理:统一返回友好错误

全局捕获异常,避免给用户显示堆栈信息:

app.UseExceptionHandler(app => app.Run(async context => {
    context.Response.StatusCode = 500;
    await context.Response.WriteAsync("服务器开小差了,请稍后再试~");
}));

四、记牢这3个"坑",否则项目必出错!

1. 中间件顺序不能乱!

错误示例:把授权中间件放在路由中间件前面,会导致授权失败。
正确顺序(从先到后):

异常处理 → HTTPS重定向 → 静态文件 → CORS → 认证 → 授权 → 路由 → 端点


▲ 中间件顺序示意图:像排队一样,前面的人先处理

2. 别忘记调用await next()

如果中间件没写await next(),请求会被"卡住",后面的中间件和接口都不会执行!

3. .NET 9用户必看:用MapStaticAssets替代UseStaticFiles

.NET 9新特性!MapStaticAssets会自动压缩静态文件(CSS/JS)、生成内容哈希(避免缓存问题),性能提升80%+:

app.MapStaticAssets();  // 代替 app.UseStaticFiles()

五、总结:中间件是个"万能工具"

中间件就像ASP.NET Core的"插件系统",无论是日志、认证、限流,还是自定义业务逻辑,都能通过它优雅实现。记住今天的5行代码模板,以后遇到类似需求,直接套用就行!

动手试试:把日志中间件改成记录访问IP,或者给响应头加个自定义标识,5分钟就能搞定~

(案例参考:Andrew Lock的开源项目blog-examples,微软官方文档ASP.NET Core中间件)

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言