ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

net core 管道分析

2021-12-16 15:00:10  阅读:126  来源: 互联网

标签:core Run 请求 app 中间件 next 管道 net


我们总所周知,net core 与net framework的区别在于,net core 底层结构重构了,采用中间件管道模式。请求传递到管道中的下一个组件,可在管道中的下一个组件前后执行工作。
1.使用 WebApplication 创建中间件管道
在这里插入图片描述
每个委托均可在下一个委托前后执行操作。 应尽早在管道中调用异常处理委托,这样它们就能捕获在管道的后期阶段发生的异常。
尽可能简单的 ASP.NET Core 应用设置了处理所有请求的单个请求委托。 这种情况不包括实际请求管道。 调用单个匿名函数以响应每个 HTTP 请求。

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.Run(async context =>
{
await context.Response.WriteAsync(“Hello world!”);
});
app.Run();

用 Use 将多个请求委托链接在一起。 next 参数表示管道中的下一个委托。 可通过不调用 next 参数使管道短路。 通常可在 next 委托前后执行操作,如以下示例所示:

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.Use(async (context, next) =>
{
// Do work that doesn’t write to the Response.
await next.Invoke();
// Do logging or other work that doesn’t write to the Response.
});

app.Run(async context =>
{
await context.Response.WriteAsync(“Hello from 2nd delegate.”);
});

app.Run();

Run 委托不会收到 next 参数。 第一个 Run 委托始终为终端,用于终止管道。 Run 是一种约定。 某些中间件组件可能会公开在管道末尾运行的 Run[Middleware] 方法。

2.中间件顺序
在这里插入图片描述
上一个图中的路由中间件显示在以下静态文件中。 这是通过显式调用 app.UseRouting 实现项目模板的顺序。 如果不调用 app.UseRouting,路由中间件将默认在管道开头运行
在这里插入图片描述
增加中间件组件的顺序至关重要:
以下 Program.cs 代码将为常见应用场景添加中间件组件:

1.异常/错误处理
当应用在开发环境中运行时:
开发人员异常页中间件 (UseDeveloperExceptionPage) 报告应用运行时错误。
数据库错误页中间件 (UseDatabaseErrorPage) 报告数据库运行时错误。
当应用在生产环境中运行时:
异常处理程序中间件 (UseExceptionHandler) 捕获以下中间件中引发的异常。
HTTP 严格传输安全协议 (HSTS) 中间件 (UseHsts) 添加 Strict-Transport-Security 标头。
2.HTTPS 重定向中间件 (UseHttpsRedirection) 将 HTTP 请求重定向到 HTTPS。
3.静态文件中间件 (UseStaticFiles) 返回静态文件,并简化进一步请求处理。
4.Cookie 策略中间件 (UseCookiePolicy) 使应用符合欧盟一般数据保护条例 (GDPR) 规定。
5.用于路由请求的路由中间件 (UseRouting)。
6.身份验证中间件 (UseAuthentication) 尝试对用户进行身份验证,然后才会允许用户访问安全资源。
7.用于授权用户访问安全资源的授权中间件 (UseAuthorization)。
8.会话中间件 (UseSession) 建立和维护会话状态。 如果应用使用会话状态,请在 Cookie 策略中间件之后和 MVC 中间件之前调用会话中间件。
9.用于将 Razor Pages 终结点添加到请求管道的终结点路由中间件(带有 MapRazorPages 的 UseEndpoints)。

标签:core,Run,请求,app,中间件,next,管道,net
来源: https://blog.csdn.net/agandefendou/article/details/121974245

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有