ASP.NET Core基础之中间件

2022-04-16 23:21:50

什么是ASP.NET Core Middleware?

ASP.NET Core中间件组件是被组装到应用程序管道中以处理HTTP请求和响应的软件组件(从技术上来说,组件只是C#类)。

ASP.NET Core应用程序中的每个中间件组件都执行以下任务。

选择是否将 HTTP 请求传递给管道中的下一个组件。这可以通过在中间件中调用下一个 next() 方法实现。可以在管道中的下一个组件之前和之后执行工作。

在ASP.NET Core中,已经有很多内置的中间件组件可供使用,您可以直接使用它们。 如果需要,还可以在ASP.NET Core应用程序中创建自己的中间件组件。

您需要牢记的最重要的一点是,在ASP.NET Core中,给定的中间件组件应仅具有特定目的,即单一职责。

在ASP.NET Core应用程序中使用中间件组件的一些示例如下:

用于验证用户身份的中间件中间件可用于记录请求和响应用于处理错误的中间件用于处理静态文件,例如图像,javascript或css文件的中间件用于在访问特定资源时授权用户的中间件

中间件组件是我们通常用于在ASP.NET Core应用程序中建立请求处理管道的组件。

如果您使用过.NET Framework的早期版本,那么您可能知道,我们使用HTTP处理程序和HTTP模块来设置请求处理管道。 正是此管道将确定如何处理HTTP请求和响应。

如何在ASP.NET Core应用程序中配置中间件组件?

在ASP.NET Core应用程序中,我们需要在Configure方法中,UseDeveloperExceptionPage() 中间件组件已注册到管道中,并且仅在将托管环境设置为“Development”时,该中间件组件才会出现。

当应用程序中发生未处理的异常时,该中间件组件将执行,并且由于它处于开发模式,因此它将向您显示代码的错误信息。 您也可以考虑将其替换为其它内容。

UseRouting

该中间件组件用于将端点路由中间件添加到请求处理管道,即它将URL(或传入的HTTP请求)映射到特定资源。

UseEndpoints

在此中间件中,将使用Map扩展方法来做出路由决策。 以下是UseEndpoints中间件组件的默认实现。 在MapGet扩展方法中,我们指定了URL模式,例如“ /”。 这仅表示域名。

因此,只有域名的任何请求都将由该中间件处理。

TTP请求和响应,这是因为上面的HttpContext对象。

在示例中,我们使用lambda表达式将请求委托内联作为匿名方法传递给内联,此外,我们还将HTTPContext对象作为输入参数传递给请求委托。 下图显示了以上内容:

ASP.NET Core基础之中间件

向该应用程序再添加一个中间件。

ASP.NET Core基础之中间件

运行该应用程序,则将获得以下输出:

My Name is Zhangsan

输出来自第一个中间件组件。 原因是,当我们使用Run() 扩展方法注册中间件组件时,该组件成为终端组件,这意味着它不会在请求处理管道中调用下一个中间件组件。

使用Use扩展方法配置中间件组件

现在想到的问题是如何在请求处理管道中调用下一个组件,答案是使用Use扩展方法注册中间件组件,如下所示。

ASP.NET Core基础之中间件

现在运行该应用程序,您将看到来自两个中间件组件的预期输出:

My Name is ZhangsanMy Name is LiSi

了解Use扩展方法

Use扩展方法将在行中定义的中间件委托添加到应用程序的请求管道中。 以下是Use扩展方法的定义:

ASP.NET Core基础之中间件

此方法也实现为IApplicationBuilder接口上的扩展方法。 这就是为什么我们能够使用IApplicationBuilder实例调用此方法的原因。 从上面的定义可以看出,该方法采用两个输入参数。 第一个参数是HttpContext上下文对象,通过它可以访问HTTP请求和响应。 第二个参数是Func类型,即它是一个通用委托,可以处理请求或调用请求管道中的下一个中间件组件。

注意:如果要将请求从一个中间件发送到下一个中间件,则需要调用下一个方法。

到此这篇关于ASP.NET Core基础之中间件的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。