【问题标题】:How to tell if middleware contains a Run()?如何判断中间件是否包含 Run()?
【发布时间】:2019-08-17 12:51:07
【问题描述】:

有没有办法在 ASP.NET Core 中判断任何给定的中间件是否包含将停止管道的 Run() 调用?似乎UseMvc() 是一个大的,但我什至不确定,我只是继续阅读它需要在最后,我认为这是因为它包含对Run() 的调用。

也许有一种方法可以为当前使用的所有中间件生成管道的可视化,显示哪个包含Run() 调用?

【问题讨论】:

  • 1.不仅Run()MapWhen() 也会终止进程。此外,任何人都可以创建一个不调用next 委托的自定义中间件,然后导致终止。 2. 中间件的职责是判断是否需要调用next。除了阅读文档/源代码外,没有内置方法可以可视化管道。这是因为所有的中间件都将在启动时构建到一个最终的委托中。当有传入消息时,最终的委托将用于处理请求。
  • [太长,无法作为一条评论发表] 作为程序员,我们知道中间件会做什么,我们知道它的分支时间,我们知道它终止的时间,这是因为我们编写代码。但是程序在实际运行之前不会知道它,因为最终委托是在启动时构建的。
  • @itminus 谢谢,你有什么理由不把它作为答案发布?
  • 因为问题是“如何分辨”。我的回复仅描述了中间件的工作原理,似乎并没有回答问题本身。所以我把它作为评论发布。
  • @itminus 您的回答似乎是,“除了阅读每个特定中间件的文档之外,没有确定的方法来判断。”

标签: asp.net-core asp.net-core-middleware


【解决方案1】:

除了阅读有关每个特定中间件的文档之外,没有确定的方法来判断。

在我的问题的 cmets 中引用 itminus:

  1. 不仅 Run(),而且 MapWhen() 都会终止进程。此外,任何人都可以创建一个不调用下一个委托然后导致终止的自定义中间件。
  2. 确定是否需要调用 next 是中间件的职责。除了阅读文档/源代码外,没有内置方法可以可视化管道。这是因为所有的中间件都将在启动时构建到一个最终委托中。当有传入消息时,最终委托将用于处理请求。作为程序员,我们知道中间件会做什么,我们知道它分支的时间,我们知道它终止的时间,这是因为我们编写了代码。但是程序在实际运行之前不会知道它,因为最终委托是在启动时构建的。

【讨论】:

    猜你喜欢
    • 2021-02-07
    • 1970-01-01
    • 2012-05-17
    • 2014-11-02
    • 1970-01-01
    • 2010-10-28
    • 1970-01-01
    • 2013-04-23
    • 2011-03-01
    相关资源
    最近更新 更多