我有一个.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” 将返回以下路线数据:
我浏览了路由文档,但没有发现任何东西。 https://github.com/aspnet/AspNetCore.Docs/blob/master/aspnetcore/fundamentals/routing.md
我看到的唯一选择是用模拟的HttpContext以某种方式调用RouteMiddleware
(https://github.com/aspnet/AspNetCore/blob/master/src/Http/Routing/src/RouterMiddleware.cs),即使可行,这似乎也算过头了?
答案 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中的操作匹配,您可以参考以下链接: