手把手带你定制.NET 6.0的Middleware中间件 您所在的位置:网站首页 maprazorpages 手把手带你定制.NET 6.0的Middleware中间件

手把手带你定制.NET 6.0的Middleware中间件

2022-12-22 09:33| 来源: 网络整理| 查看: 265

目录前言技术准备中间件简介编写自定义中间件中间件的潜力使用/map分支管道使用MapWhen分支管道使用中间件构造条件在ASP.NETCore3.0及更高版本中使用中间件重写终止中间件总结前言在本...

目录前言技术准备中间件简介编写自定义中间件中间件的潜力使用/map分支管道使用MapWhen分支管道使用中间件构造条件在ASP.NET Core 3.0及更高版本中使用中间件重写终止中间件总结

前言

在本文中,我们将学习中间件,以及如何使用它进一步定制应用程序。我们将快速学习中间件的基础知识,然后探讨如何使用它做的一些特殊事情。本文涵盖的主题包括:

中间件简介编写自定义中间件中间件的潜力如何使用中间件

本章所处的位置,如下图所示:

手把手带你定制.NET 6.0的Middleware中间件

技术准备

我们使用控制台、shell或Bash终端先创建一个ASP.NET Core MVC应用程序,然后切换到工作目录:

dotnet new web -n MiddlewaresDemo -o MiddlewaresDemo

然后用VS打开项目:

cd MiddlewaresDemo code .

注意在.NET 6.0中,web项目模板发生了变化。Microsoft引入了minimal API,项目模板默认使用minimal API。

中间件简介

大多数人可能已经知道中间件是什么,但有些人可能不知道,即使你已经在使用ASP.NET Core有一段时间了。我们一般不需要详细了解中间件实例,因为它们大多隐藏在扩展方法后面,例如UseMvc()、UseAuthentication()、UseDeveloperExceptionPage()等。每次在Configure方法中,我们默认将隐式地使用至少一个或更多个中间件组件。

中间件组件是处理请求管道的一段代码。我们可以将请求流程想象成一串管道,每次请求调用,都会返回一个响应。中间件负责创建回声——它操纵请求上下文,加工处理、叠加逻辑、丰富信息。

手把手带你定制.NET 6.0的Middleware中间件

中间件组件按配置顺序执行。配置的第一个中间件组件是第一个执行的组件。我们可以把中间件看成回旋镖,出去的时候第一个执行,回来的时候最后一个执行。

在ASP.NET Core web应用程序,如果客户端请求的是图像或任何其他静态文件,StaticFileMiddleware将负责查找该资源,如果找到该资源,则返回该资源。如果没有,这个中间件除了调用下一个之外什么都不做。

MvcMiddleware组件检查请求的资源,将其映射到已配置的路由,执行控制器,创建视图,并返回html或Web API结果。如果MvcMiddleware没有找到匹配的控制器,它无论如何都会返回一个结果——通常是一个404状态的结果,这就是为什么MvcMiddleware是最后配置的中间件。

异常处理中间件通常是配置的第一批的中间件之一,不是因为它是第一个执行的,而是因为它是最后一个执行的。异常处理验证结果,并以客户端友好的方式在浏览器中显示可能的异常。以下过程描述了运行时发生的500错误状态:

var builder = WebApplication.CreateBuilder(args); var app = builder.Build(); app.MapGet("/", () => "Hello World!"); app.Run();

在ASP.NET Core 6.0,Microsoft引入了minimal API,它简化了应用配置,并隐藏了许多默认配置,比如隐式的using声明,因此,在头部我们看不到任何using语句,以上就是我们看到的ASP.NET Core 6.0中的Program.cs文件内容。

在这里,lambda中间件绑定到默认路由,只有一句简单的“Hello World!”响应流。这个特殊的中间件会终止管道并返回响应内容。因此,它是最后一个运行的中间件。

下面我们把app.MapGet()做个替换,如下所示:

app.Use(async (context, next) =>{ await context.Response.WriteAsync("==="); await next(); await context.Response.WriteAsync("==="); }); app.Use(async (context, next) => { await context.Response.WriteAsync(">>>>>> "); await next(); await context.Response.WriteAsync("


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有