• ASP.NET Core引入了中间件(middleware)的概念
  • 浪牛三刀 发表于 2016/3/12 17:03:00 | 分类标签: .NET middleware
  • ASP.NET Core引入了中间件(middleware)的概念来定义HTTP 管道(pipeline)。中间件是一系列组合在一起形成web应用程序的组件。这个概念的灵感来源于OWIN和Katana,在ASP.NET早期版本中也提供了类似的功能。

    一个中间件是HTTP 管道中的一个组件。中间件逐个执行,并在管道中链式地调用下一个中间件。每个中间件都可以终止调用链。例如,如果认证过程失败,则认证中间件不会再执行下一个中间件。下图说明了执行流程。
    除了ASP.NET Core中内置的中间件,我们也可以创建新的中间件。如果需要自定义中间件,可以编写一个类,该类中必须包含以HttpContext作为第一个参数的方法。这个方法允许增加其他参数,可以通过依赖注入进行解析。下面的类定义了一个日志中间件:
    public class RequestLoggerMiddleware
    {
    private readonly RequestDelegate _next;
    private readonly ILogger _logger;
    public RequestLoggerMiddleware(RequestDelegate next, ILoggerFactory loggerFactory)
    {
    _next = next;
    _logger = loggerFactory.CreateLogger();
    }
    public async Task Invoke(HttpContext context)
    {
    _logger.LogInformation("Handling request: " + context.Request.Path);
    await _next.Invoke(context);
    _logger.LogInformation("Finished handling request.");
    }
    }
    中间件必须在Startup类的Configure方法中进行注册才可以执行。
    public void Configure(IApplicationBuilder app)
    {
    app.UseMiddleware();
    }
    一点需要注意的是,中间件的执行顺序依赖于它们添加到管道中的顺序。这就意味着必须花费一些精力确定中间件之间隐含的依赖关系。例如,一个组件要使用会话状态,但是如果它在会话中间件之前执行,则会导致崩溃。

    伴随着ASP.NET Core“为你所用的资源付费”的理念,一些应用程序的性能可能会有所改善,因为只有明确配置的中间件才会执行。该框架不再依赖于System.Web.dll;组件将以NuGet包的形式提供。这也意味着组件的更新将由NuGet负责处理,并且每个中间件均可独立更新。

  • 请您注意

    ·自觉遵守:爱国、守法、自律、真实、文明的原则

    ·尊重网上道德,遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法规

    ·严禁发表危害国家安全,破坏民族团结、国家宗教政策和社会稳定,含侮辱、诽谤、教唆、淫秽等内容的作品

    ·承担一切因您的行为而直接或间接导致的民事或刑事法律责任

    ·您在编程中国社区新闻评论发表的作品,本网站有权在网站内保留、转载、引用或者删除

    ·参与本评论即表明您已经阅读并接受上述条款

  • 感谢本文作者
  • 作者头像
  • 昵称:浪牛三刀
  • 加入时间:2013/7/12 0:00:00
  • TA的签名
  • 这家伙很懒,虾米都没写
  • +进入TA的空间
  • 以下内容也很赞哦
分享按钮