【发布时间】:2020-01-08 02:05:41
【问题描述】:
我有一个 .Net Core 2.2 MVC 应用程序,其中路由定义为我的 MVC 操作的路由属性。 我想找到匹配的路由(如果有)以及来自给定 Uri 的路由数据是什么(即不是当前的 HTTP 请求,而是来自例如数据库的静态 Uri)。
我已经使用LinkGenerator.GetPathByAction() 方法来获取带有路由数据的特定操作的“路由 URL”。我所追求的是相反的:一种采用 URL/Uri 并返回匹配路由及其路由数据的方法。
例如,如果我有使用以下模板注册的路线:
[Route("/my-action/{id:int}/{name}")]
URL "/my-action/5/my-test-name" 将返回以下路由数据:
- id:5
- 名称:我的测试名称
我浏览了路由文档,但没有找到任何东西。 https://github.com/aspnet/AspNetCore.Docs/blob/master/aspnetcore/fundamentals/routing.md
我看到的唯一选择是以某种方式调用 RouteMiddleware (https://github.com/aspnet/AspNetCore/blob/master/src/Http/Routing/src/RouterMiddleware.cs) 并带有一个模拟 HttpContext,即使可行,这似乎也有点矫枉过正?
【问题讨论】:
-
嗨,我不确定我是否理解你想要做什么。 “我想找到匹配的路线(如果有的话)以及来自给定 Uri 的路线数据”。您能否进一步解释您想要获取匹配路线信息的上下文?我问是因为这些信息(在某种程度上)在不同的地方以不同的方式提供。
-
嗨@gerryc.inc,我的应用程序中定义了很多复杂的路由。有一次,我将请求 URL 保存在数据库中(即 /my-action/5/test),尽管在这个阶段我有路由数据,但我不保存它们。然后,我从数据库中检索本地 URL。我想再次处理它(无需发出新的 HTTP 请求)以获得匹配的路由和路由数据,有效提取 RouteMiddleware 使用的匹配逻辑。
标签: asp.net-core routing asp.net-core-mvc asp.net-mvc-routing