当构建一个ASP。网络核心application, you can draw on various middleware components to inspect, route, or modify the request and response messages that flow through the pipeline. You can also编写自己的自定义中间件在ASP。净的核心。
通常,你有一个中间件组件链在ASP应用程序的管道。净的核心。在本文中,我们将研究中间件在ASP。网络核心and how we can work with the convention-based and factory-based approaches.
使用本文中提供的代码示例,您应该Visual Studio 2022安装在您的系统。如果你不已经有一个副本,你可以在这里下载Visual Studio 2022。
创建一个ASP。网络核心7 Web API project in Visual Studio 2022
首先,让我们创建一个ASP。网络核心7 project in Visual Studio 2022. Follow these steps:
- 启动Visual Studio 2022 IDE。
- 点击“创建新项目。”
- 在“创建新项目”窗口中,选择“ASP。网络核心Web API” from the list of templates displayed.
- 单击Next。
- 在“配置您的新项目”窗口中,指定新项目的名称和位置。
- (可选)检查“解决方案和项目在同一个目录”复选框,根据您的喜好。
- 单击Next。
- 下所示的“其他信息”窗口中,把“使用控制器(取消使用最少的api)”复选框。我们不会在这个项目中使用最少的api。离开“验证类型”设置为“无”(默认)。
- 确保复选框“启用开放API支持,”“为HTTPS,配置”和“使码头工人”没有在这里我们不会使用这些功能。
- 单击Create。
我们将使用ASP。网络核心7 Web API project to work with factory-based middleware activation in the sections below.
了解中间件在ASP。网络核心
中间件的软件组件包括ASP中的请求/响应处理管道。净的核心。传入请求流经管道中的每个中间件组件,这些组件,每个可以处理请求或管道前进到下一个组件。
中间件可以做的事情有很多,包括身份验证、授权、日志记录、异常处理、路由、缓存和响应压缩。可以模块化功能应用程序的单个组件和添加、删除或重新排列中间件定制您的应用程序的请求和响应处理管道。
传统上,您必须配置您的中间件组件使用UseMiddleware扩展方法启动类或程序。cs文件在使用新版本的ASP。净的核心。相比之下,工厂中间件激活允许您定义和配置中间件组件使用工厂,在激活提供更大的灵活性。
请注意,如果你不写定制中间件工厂类,默认将使用中间件工厂。在ASP。核心网,您可以激活您的中间件在两种不同的方式:基于约定的中间件激活和工厂中间件激活。现在让我们检查两种方法。
基于约定的中间件在ASP。网络核心
基于约定的中间件激活在ASP。网络核心is a feature that allows you to automatically apply middleware to the request/response pipeline based on predefined conventions, rather than explicitly configuring each middleware component. The following code listing illustrates how you can create a convention-based middleware component.
公开课ConventionalMiddleware{私人只读的RequestDelegate _next;公共ConventionalMiddleware (RequestDelegate下)= > _next =下一个;公共异步任务InvokeAsync (HttpContext上下文){痕迹。WriteLine(“内部传统的中间件。”);等待_next(上下文);}}
你可以添加这个中间件请求处理管道usng下面的代码在程序中。cs文件。
var builder = WebApplication.CreateBuilder (args);应用var = builder.Build ();app.UseMiddleware < ConventionalMiddleware > ();app.Run ();
工厂中间件在ASP。网络核心
工厂中间件激活在ASP。网络核心provides a more flexible and dynamic way to configure and activate middleware components. With factory-based middleware activation, you can customize the middleware instantiation process based on your application’s needs.
工厂中间件可以注入依赖关系有一个作用域终身使用您的中间件甲级的构造函数功能不支持的基于约定的中间件。作用域一生意味着服务每个客户端请求创建一次,年底和处理请求。
工厂中间件具有以下优势传统风格或基于约定的中间件:
- 而基于约定的中间件当开始创建ASP。网络核心application, factory-based middleware is created with each request.
- 因为工厂中间件提供了每个请求激活支持,您可以注入范围服务中间件的构造函数。
- 工厂中间件促进强类型的中间件类型。
使用工厂中间件激活,你应该遵循以下四个步骤。
- 创建一个类,代表您的中间件组件和实现IMiddleware接口。
- 在您的中间件实现InvokeAsync方法,定义了中间件的逻辑。
- 添加中间件DI容器使用AddSingleton或AddScoped方法。
- 配置中间件管道使用UseMiddleware扩展方法并指定您的中间件组件的类型。
下面的代码清单展示了如何编写一个工厂中间件组件。
公共类FactoryActivatedMiddleware: IMiddleware{公共异步任务InvokeAsync (HttpContext上下文,RequestDelegate){痕迹。WriteLine(“内部工厂激活中间件。”);等待next.Invoke(上下文);}}
你应该注册的中间件服务容器使用下面的代码段。
var builder = WebApplication.CreateBuilder (args);builder.Services.AddTransient < FactoryActivatedMiddleware > ();
你现在可以添加这个中间件一样我们添加了中间件在基于约定的中间件的例子。
var builder = WebApplication.CreateBuilder (args);应用var = builder.Build ();app.UseMiddleware < FactoryActivatedMiddleware > ();app.Run ();
每次调用UseMiddleware扩展方法检查是否符合IMiddleware接口中间件实现问题。如果是满足此条件,实例IMiddlewareFactory注册的服务容器是用来解决IMiddleware接口实现,而不是基于约定的中间件的实现。这个中间件是注册为瞬态或范围内的服务服务容器。
IMiddlewareFactory接口定义了两个方法,即创建(类型)和释放(IMiddleware)方法。而创建(类型)方法用于为每个请求创建一个中间件实例,释放(IMiddleware)方法释放IMiddleware实例的请求。的默认实现IMiddlewareFactory Microsoft.AspNetCore.Http是可用的。MiddlewareFactory类。