【问题标题】:How to get route values for any url in asp.net core?如何获取 asp.net 核心中任何 url 的路由值?
【发布时间】:2017-12-16 04:15:07
【问题描述】:

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

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

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

看起来一旦我有一个带有 URL 请求的 HttpContext,就很容易获得路由值,并在 GitHub 中查看 aspnet/Hosting 的源代码,我到了创建 HttpContextFactory 的地步,但是是吗,简直不能更进一步了!

有人知道怎么做吗?

提前致谢!

【问题讨论】:

  • 你能和我们分享你的尝试吗?很难猜出您要解决什么问题。
  • 您可能还应该查看 aspnet/Routing 存储库:)
  • 我正在尝试从 Request 对象的引荐来源网址中获取 RouteValues,以实现简单的视图导航方案。就好像我用引荐来源网址创建了一个新的 Request 对象并从中获取 RouteValues。

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


【解决方案1】:

我知道这是一篇较早的帖子,但我这样做是为了从基于 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 由根级路由器填充。

【讨论】:

  • RouteData.Routers.First() 序列不包含任何元素
  • 与上述相同的错误 - 我认为这几乎没有这么简单。
【解决方案2】:

请尝试;

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

【讨论】:

  • 请解释你的答案
  • 谢谢,但是 ViewContext.RouteData 有当前请求的路由值,我正在寻找的是类似的东西,但是对于推荐 url。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-07
  • 1970-01-01
  • 1970-01-01
  • 2017-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多