来自静态Uri的路线匹配+路线数据提取

时间:2019-09-05 07:58:53

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

我有一个.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

我看到的唯一选择是用模拟的HttpContext以某种方式调用RouteMiddlewarehttps://github.com/aspnet/AspNetCore/blob/master/src/Http/Routing/src/RouterMiddleware.cs),即使可行,这似乎也算过头了?

1 个答案:

答案 0 :(得分:0)

  

我想找到匹配的路线(如果有)以及来自给定Uri的路线数据。

如果要在动作中获取具有匹配路线的路线数据,可以直接在当前GetRouteData对象中使用HttpContext,如下所示:

 [Route("/GetRouteData/{id:int}/{name}")]
 public void GetRouteData()
 {
        var routeData = HttpContext.GetRouteData();

        var routeCollection = routeData.Values;
        var id = routeData?.Values["id"]?.ToString();
        var name = routeData?.Values["name"]?.ToString();

  }

关于确定URL是否与ASP.NET MVC Core中的操作匹配,您可以参考以下链接:

https://joonasw.net/view/find-out-if-url-matches-action

https://weblog.west-wind.com/posts/2019/May/15/Accessing-RouteData-in-an-ASPNET-Core-Controller-Constructor

https://rimdev.io/asp-net-core-routes-middleware/