【问题标题】:Which router handles incoming request first in a mixed routing scenario在混合路由场景中哪个路由器首先处理传入请求
【发布时间】:2020-06-29 12:10:36
【问题描述】:

我理解对于常规路由,请求首先命中mvcmiddleware,然后路由器会将请求与预定义的模板进行比较。

如果找到匹配的,则从请求中提取路由值并将其分配给所选模板的路由参数。然后使用控制器和操作路由参数来查找请求的路由。

另一方面,属性路由 url 是在运行时计算的,并作为 url 的键值对和关联的操作存储在字典中,当请求命中 mvcmiddleware 时,它​​会检查请求 url 是否是字典并调用相关的操作。

但是当请求到达我们定义了两种路由类型的 mvcmiddleaware 时,哪个路由器倾向于首先处理请求?

【问题讨论】:

  • 请阅读这篇 ASP.NET 路由文章的section
  • 我有,但它没有回答我关于哪个路由器首先尝试处理请求的问题。

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


【解决方案1】:

根据我的理解,传统路由和基于属性的路由都使用中间件。我假设路由规则评估遵循中间件注册。因此,如果首先配置基于路由的中间件 (UseRouting),则应首先评估其规则。

为了确保首先评估哪个,我建议使用路由调试器,例如thisblog post。通过调用UseRouteDebugger,您将能够在响应标头中看到已解析的路由规则。

【讨论】:

  • 你是说常规路由有自己的中间件,属性路由也有自己的中间件?
  • @GodfredBoateng 确实如此。常规:对于 .NET Core 2.x,有一个名为 UseMvcWithDefaultRoute 的扩展方法。对于 .NET Core 3.x,您必须使用 UseMvcUseEndpoints。属性:如果是 .NET Core 2.x,则有 UseEndpointRouting,在 .NET 3.x 中有 UseRouting。详情请查看以下文件的源代码:MvcApplicationBuilderExtensions, EndpointRoutingApplicationBuilderExtensions
  • 我的不好,当你提到中间件时,我的脑海里就直接想到了管道它自己,当然,属性路由和常规会有自己的中间件。你的回答满足了我的问题。谢谢你的时间。
  • @GodfredBoateng 如果它满足您的问题,那么您会这么友善并将其标记为答案。谢谢老兄。
猜你喜欢
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-18
  • 1970-01-01
  • 2018-04-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多