第五节:管道中间件入门(Use、Run、Map)

本文介绍了ASP.NET Core中中间件的概念,包括其作为请求处理组件的职责,如何短路请求,以及配置顺序。重点讲解了Use、Run方法的使用和区别,以及Map和MapWhen方法在满足特定条件时执行中间件的场景。通过代码示例展示了中间件的实现和执行流程。

一. 简介

1.中间件是一种装配到应用管道以处理请求和响应的组件,每个组件可以选择是否把请求传递到管道中的下一个组件、可在管道中的下一个组件的前后执行工作.请求管道中的每一个组件负责调用管道中的下一个组件(或者使管道短路).

经典的管道请求图:

 

2.当中间件短路的时候,它被称为“终端中间件”,因为它阻止中间件进一步处理请求。

3.顺序:向Startup.Configure方法中添加常用中间件组件,需要按照下面的顺序,从而保证安全性、性能、功能。

 异常/错误处理→ HTTP 严格传输安全协议→HTTPS 重定向→静态文件服务器→Cookie 策略实施→身份验证→会话→MVC。

 1 public void Configure(IApplicationBuilder app)
 2 {
 3     if (env.IsDevelopment())
 4     {
 5         app.UseDeveloperExceptionPage();
 6         app.UseDatabaseErrorPage();
 7     }
 8     else
 9     {
10         app.UseExceptionHandler("/Error");
11         app.UseHsts();
12     }
13 
14     // Use HTTPS Redirection Middleware to redirect HTTP requests to HTTPS.
15     app.UseHttpsRedirection();
16 
17     // Return static files and end the pipeline.
18     app.UseStaticFiles();
19 
20     // Use Cookie Policy Middleware to conform to EU General Data 
21     // Protection Regulation (GDPR) regulations.
22     app.UseCookiePolicy();
23 
24     // Authenticate before the user accesses secure resources.
25     app.UseAuthentication();
26 
27     // If the app uses session state, call Session Middleware after Cookie 
28     // Policy Middleware and before MVC Middleware.
29     app.UseSession();
30 
31     //
<think>好的,用户的问题是关于ASP.NET Core中UseRun中间件的区别。我需要先回忆这两个方法的作用和区别,确保准确。 首先,Use方法是用于将多个中间件链接起来,每个中间件可以调用下一个中间件,通过调用next.Invoke()。而Run方法则是终止中间件链,不会调用下一个中间件。 然后,要解释它们的使用场景。比如,Use适用于需要处理请求并传递到下一个中间件的情况,比如日志记录、身份验证。而Run通常用于处理请求的终点,比如返回响应。 可能用户还会混淆两者的用法,需要举例说明代码结构。例如,使用Use中间件函数需要接受next参数,并在适当的时候调用它。而Run只需要处理当前的请求,不需要传递下去。 还要注意顺序问题,因为在中间件管道中,顺序很重要。Run之后的中间件不会被执行,所以必须放在最后。而Use可以按顺序添加多个中间件,每个都可能调用下一个。 最后,检查是否有其他相关问题,比如中间件的生命周期、如何创建自定义中间件,或者配置中间件的顺序。这样在相关问题部分可以提出这些问题,帮助用户进一步学习。</think><< 在ASP.NET Core中,`Use`和中间件(Middleware)的关系需要明确区分。`Use`是配置中间件的方法,而中间件是处理请求的核心组件。以下是具体区别: ### 1. **中间件(Middleware)** 中间件是组成请求管道的组件,用于处理HTTP请求和响应。每个中间件可以: - 执行逻辑(如身份验证、日志记录) - 决定是否将请求传递给下一个中间件 - 修改请求或响应 ### 2. **`Use`方法** `Use`是`IApplicationBuilder`接口的扩展方法,用于将中间件添加到请求管道中。它的核心特点是: - 支持链式调用(通过`next`参数) - 允许中间件控制是否调用下一个组件 #### 示例代码: ```csharp public void Configure(IApplicationBuilder app) { // 使用 Use 添加中间件 app.Use(async (context, next) => { // 请求处理逻辑(前置) await context.Response.WriteAsync("Before middleware\n"); await next.Invoke(); // 调用下一个中间件 // 响应处理逻辑(后置) await context.Response.WriteAsync("After middleware\n"); }); // Run 是终止中间件(不会调用下一个) app.Run(async context => { await context.Response.WriteAsync("Terminal middleware\n"); }); } ``` ### 关键区别: | 特性 | `Use` | 中间件(如`Run`/`Map`) | |---------------------|--------------------------------|-------------------------------| | 是否传递请求 | 是(通过`next.Invoke()`) | 否(如`Run`终止管道) | | 用途 | 链式处理(如日志、异常处理) | 终止处理(如返回响应) | | 灵活性 | 高(可前置/后置逻辑) | 低(仅处理当前请求) | ### 其他中间件方法: - **`Run`**: 直接终止管道,不调用下一个中间件。 - **`Map`**: 根据请求路径分支中间件。 ### 总结: `Use`是中间件的注册工具,而中间件是实际处理逻辑的组件。`Use`允许构建可扩展的管道,而`Run`等方法是管道的终止点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值