.Net Core MiddleWare
1..Net Core ActionFilter2..Net Core ResourceFilter3..Net Core Jwt鉴权授权4..Net Core Mvc Razor 组件5..Net Core Autofac6..Net Core ActionFilter7..Net Core ExceptionFilter8..Net Core AlwaysRunResultFilter9..Net Core EntityFrameCore10..Net Core 读取配置文件11..Net Core NLog+oracel
12..Net Core MiddleWare
13..Net Core WebApi14..Net Core gRpc调用作用
中间件是一种装配到应用管道以处理请求和响应的软件。 每个组件:
- 选择是否将请求传递到管道中的下一个组件。
- 可在管道中的下一个组件前后执行工作。
请求委托用于生成请求管道。 请求委托处理每个 HTTP 请求。
Use
执行顺序为: 自定义中间件1Request -> 自定义中间件2Request -> ...Request -> 自定义中间件2Response -> 自定义中间件1Response
第一种
app.Use(async (conext, next) =>
{
await conext.Response.WriteAsync("<h1>(1)</h1>");
await next(conext);
await conext.Response.WriteAsync("<h1>(1)</h1>");
});
第二种
使用拓展方法实现,在program.cs 文件中可以使用 app.MiddlewareExtexns() 达到相同的效果
namespace ExceptiopnWebApp.Expansion
{
public static class MiddlewareExtexns
{
public static IApplicationBuilder UseMiddleWare(this IApplicationBuilder app)
{
return app.Use(async (conext, next) =>
{
await conext.Response.WriteAsync("<h1>(2)</h1>");
await next(conext);
await conext.Response.WriteAsync("<h1>(2)</h1>");
});
}
}
}
UseMiddleWare
- 需要提供: public async Task InvokeAsync(HttpContext context)
- 如果中间件需要继续向下执行需要提供 private readonly RequestDelegate _next;
CustomMiddleWare.cs
namespace ExceptiopnWebApp.Middleware
{
public class CustomMiddleWare
{
private readonly RequestDelegate _next;
public CustomMiddleWare(RequestDelegate next)
{
_next = next;
}
public async Task InvokeAsync(HttpContext context)
{
await context.Response.WriteAsync("UseMiddleWare1");
await _next(context);
await context.Response.WriteAsync("UseMiddleWare1");
}
}
}
Program.cs
app.UseMiddleware<CustomMiddleWare>();
Map
- 浏览器地址上出现字符匹配就进入你的中间件
app.Map("/Hello", app =>
{
app.Use(async (context, next) =>
{
await context.Response.WriteAsync("World");
await next(context);
});
});
MapWhen
- 条件成功就进入你的中间件
app.MapWhen(conext =>
{
return conext.Request.Path.Value?.Contains("Name") ?? false;
}, app =>
{
app.Use(async (context, next) =>
{
await context.Response.WriteAsync("Job!!!");
await next(context);
});
});
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?