C# ASP.NET Core 中间件与 HttpModule 有何不同?
csharpserver side programmingprogramming更新于 2025/4/14 22:07:17
HttpModules 通过 web.config 或 global.asax 配置,开发人员无法控制执行顺序。
模块顺序主要基于应用程序生命周期事件。请求和响应的执行顺序保持不变。
HttpModules 可帮助您将特定于应用程序事件的代码附加到应用程序事件。HttpModules 与 System.web 绑定。
中间件在 Startup.cs 代码中配置,而不是在 web.config 文件(应用程序的入口点)中配置
与 HttpModules 不同,可以完全控制执行的内容和执行顺序。因为它们是按照添加的顺序执行的。
响应中间件的顺序与请求的顺序相反。
中间件独立于这些事件。
中间件与主机无关。
内置于 Asp.Net core 的中间件
Authentication 提供身份验证支持。
CORS 配置跨源资源共享。
Routing 定义和约束请求路由。
Session 提供对管理用户会话的支持。
Diagnostics 包括对错误页面和运行时信息的支持。
示例
public class MyMiddleware{
private readonly RequestDelegate _next;
private readonly ILogger _logger;
public MyMiddleware(RequestDelegate next, ILoggerFactory logFactory){
_next = next;
_logger = logFactory.CreateLogger("MyMiddleware");
}
public async Task Invoke(HttpContext httpContext){
_logger.LogInformation("MyMiddleware executing..");
await _next(httpContext); // 调用下一个中间件
}
}
// 用于将中间件添加到 HTTP 请求管道的扩展方法。
public static class MyMiddlewareExtensions{
public static IApplicationBuilder UseMyMiddleware(this IApplicationBuilder
builder){
return builder.UseMiddleware<MyMiddleware>();
}
}
//使用扩展方法在请求管道中添加自定义中间件,如下所示
public void Configure(IApplicationBuilder app, IHostingEnvironment env){
app.UseMiddleware<MyMiddleware>()
app.Run(async (context) =>{
await context.Response.WriteAsync("Hello World!");
});
}

