博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ASP.NET Core提供模块化Middleware组件
阅读量:6824 次
发布时间:2019-06-26

本文共 1363 字,大约阅读时间需要 4 分钟。

ASP.NET Core引入了(middleware)的概念来定义HTTP 管道(pipeline)。中间件是一系列组合在一起形成web应用程序的组件。这个概念的灵感来源于,在ASP.NET早期版本中也提供了类似的功能。

\\

一个中间件是HTTP 管道中的一个组件。中间件逐个执行,并在管道中链式地调用下一个中间件。每个中间件都可以终止调用链。例如,如果认证过程失败,则认证中间件不会再执行下一个中间件。下图说明了执行流程。

\\

60959b144fecbcf461d95de36c132133.png

\\

除了,我们也可以创建新的中间件。如果需要自定义,可以编写一个类,该类中必须包含以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负责处理,并且每个中间件均可独立更新。

\\

查看英文原文

\\

感谢对本文的审校。

\

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至。也欢迎大家通过新浪微博(,),微信(微信号:)关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入InfoQ读者交流群(已满),InfoQ读者交流群(#2))。

转载地址:http://jylzl.baihongyu.com/

你可能感兴趣的文章
SSD(Single Shot MultiBox Detector)二读paper
查看>>
单元测试过程
查看>>
python之zip打包
查看>>
一个leetcode解题报告类目,代码很简洁
查看>>
C++中一些类和数据结构的大小的总结
查看>>
JEECMSV9导入IDEA,经历一番折腾,终于可以了。
查看>>
关于数字取整、四舍五入
查看>>
Java和MongoDB之Hello World
查看>>
网站前端性能优化常用几种方式
查看>>
#iOS问题记录#UITableView加载后直接滑动倒最底部
查看>>
拒绝从入门到放弃_《Openstack 设计与实现》必读目录
查看>>
阅读笔记《梦断代码》其三
查看>>
yarn-1.12.3.msi 下载地址 百度网盘
查看>>
Git二进制文件冲突解决
查看>>
springcloud(十二):使用Spring Cloud Sleuth和Zipkin进行分布式链路跟踪
查看>>
(2):Mysql 查看、创建、更改 数据库和表
查看>>
团队任务,团队报告。
查看>>
mysql 按出现次数排序
查看>>
shell中使用类似Python的参数处理
查看>>
新学的的matplotlib库~~~~
查看>>