C# ASP.NET Core 中间件与 HttpModule 的区别


HttpModule 通过 web.config 或 global.asax 配置,开发者无法控制执行顺序。

由于模块的顺序主要基于应用程序生命周期事件,因此请求和响应的执行顺序保持不变。

HttpModule 帮助您将特定于应用程序事件的代码附加到应用程序事件。HttpModule 与 System.web 绑定。

中间件在 Startup.cs 代码中配置,而不是 web.config 文件(应用程序的入口点)。

与 HttpModule 不同,可以完全控制执行的内容和顺序,因为它们按照添加的顺序执行。

响应的中间件顺序与请求的中间件顺序相反。

中间件独立于这些事件。

中间件与主机无关。

Asp.Net Core 的内置中间件

身份验证    提供身份验证支持。

CORS                  配置跨域资源共享。

路由                定义和约束请求路由。

会话              提供对管理用户会话的支持。

诊断        包括对错误页面和运行时信息的 支持。

示例

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); // calling next middleware
   }
}

// 用于将中间件添加到 HTTP 请求管道的扩展方法。

public static class MyMiddlewareExtensions{
   public static IApplicationBuilder UseMyMiddleware(this IApplicationBuilder
   builder){
      return builder.UseMiddleware<MyMiddleware>();
   }
}

// 使用 Use 扩展方法,如下所示,在请求管道中添加自定义中间件

public void Configure(IApplicationBuilder app, IHostingEnvironment env){
   app.UseMiddleware<MyMiddleware>()
   app.Run(async (context) =>{
      await context.Response.WriteAsync("Hello World!");
   });
}

更新于:2020年9月25日

998 次浏览

开启您的职业生涯

通过完成课程获得认证

开始学习
广告