我刚刚开始学习 ASP.NET core 7.0,我有一个问题。有一个 Map 方法,它需要在站点周围进行路由(我或多或少理解这一点),并且有一个 Use 方法充当初始(第一个)请求处理程序并允许您管理中间件。我想象在访问网站时使用此方法作为首页,例如,在看到主页之前,或者一般来说网站的任何页面,您需要进行身份验证,并且只有当用户通过身份验证时,然后等待next.Invoke() 就可以了;并且站点的所有页面都会显示,如果不显示,认证页面就会一直挂掉。
我不明白我是否正确地表达了它的用途。我还想看到 Use 在实际项目中的使用,而不是在简单的示例中。
我将不胜感激任何帮助,特别是如果有项目中的使用示例。
许多字母
当请求到达时,它会通过请求处理程序管道。他们一前一后,轮流将请求传递给对方,就像接力棒一样。每个管道由多个处理程序组成。处理程序的另一个名称是
middleware。当您使用该方法时
Use(),您正在将另一个方法添加middleware到管道中。这些可能有很多middleware。我从来没有这样做
这里我连接了三个
midlleware。现在让我们弄清楚
context和 的含义next。context- HttpContext 类的实例。这就是midlleware他们互相传递的东西。next- 链接到下一个middleware。这就是我一直做的
现在我将向您展示我如何创建自己的
middleware. 为此,我为我的未来创建了一个单独的类middleware。我认为这是最佳实践。该类
middleware捕获控制器内部引发的所有异常。根据异常,它向客户端返回适当的响应代码。如前面的示例所示:
context在方法中Invoke(),是 HttpContext 类的实例。这就是midlleware他们互相传递的东西。next在类构造函数中ExceptionHandlerMiddleware- 对下一个的引用middleware。现在我将它连接到我的传送带
这就是班级
Startup。它用于配置应用程序。在这个地方,连接了各种服务、数据库,middleware配置了依赖容器。注意线路
这一行将我的添加
middleware到请求处理程序管道中。遵循连接顺序很重要。词汇表
Middleware- 请求处理程序。当它完成处理请求时,它将类实例传递HttpContext给下一个middleware。HttpContext- 这是一个存储有关请求的信息的类。middleware相互传递的是此类的实例。当轮到最后一个时middleware,他把它交给合适的人Controller。RequestDelegate是代表。委托存储对该方法的引用。Invoke()在这种情况下,它存储对下一个方法的引用middleware。