通过web.config或global.asax配置HttpModule。开发人员无法控制执行顺序。
由于模块的顺序主要基于应用程序生命周期事件。请求和响应的执行顺序保持不变。
HttpModules可帮助您附加特定于应用程序事件的代码。HttpModules绑定到System.web。
中间件是使用Startup.cs代码而不是web.config文件(应用程序的入口)配置的
与HttpModules不同,可以完全控制执行什么操作以及执行顺序。按照添加顺序执行它们。
响应的中间件顺序与请求的顺序相反。
中间件独立于这些事件。
中间件与主机无关。
内置Asp.Net核心中间件
身份验证 提供身份验证支持。
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>();
   }
}//使用如下所示的使用扩展方法在请求管道中添加自定义中间件
public void Configure(IApplicationBuilder app, IHostingEnvironment env){
   app.UseMiddleware<MyMiddleware>()
   app.Run(async (context) =>{
      await context.Response.WriteAsync("你好,世界!");
   });
}