如何获取asp.net核心中任何URL的路由值?

时间:2017-07-11 22:57:30

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

我需要获取ASP.NET MVC Core中任意URL的路由值。

可能是这样的问题:How to determine if an arbitrary URL matches a defined route,因为我没有找到任何直接的方法来做这件事。

我也无法用这种方法做到这一点。

看起来,一旦我有一个带有URL请求的HttpContext,很容易获得路由值,并且在GitHub中查看aspnet/Hosting的源代码,我已经到了创建HttpContextFactory的地步,但就是这样,就再也没有了!

有人知道怎么做吗?

提前致谢!

2 个答案:

答案 0 :(得分:0)

我知道这是一篇较旧的文章,但这是我从基于URL的ASP.NET MVC Core应用程序中运行的RouteCollection中获取RouteData的工作。

public async Task<ActionResult> GetRouteDataForUrl([FromQuery(Name = "url")] string url)
{
  var uri = new Uri(url);

  var httpContext = new DefaultHttpContext();
  httpContext.Request.Path = uri.PathAndQuery;

  var routeContext = new RouteContext(httpContext);
  var router = RouteData.Routers.First(); //get the top level router

  await router.RouteAsync(routeContext); //router updates routeContext

  return new JsonResult(routeContext.RouteData.Values);
}

routeContext.RouteData由根级路由器填充。

答案 1 :(得分:-1)

请试试;

var t =  ViewContext.RouteData.Values["id"];