【问题标题】:Is it possible to parse a URL into it's composite components?是否可以将 URL 解析为其复合组件?
【发布时间】:2010-03-13 18:02:06
【问题描述】:

我想将传入的 URL 解析为它的组件部分,以便在将其传递到标准 MVC 路由逻辑之前进行一些预处理。例如给定您的标准路线

{controller}/{action}/{id}

和网址

/user/show/10

有没有办法让路由系统返回包含控制器、操作和 id 键及其对应值的字典?

【问题讨论】:

  • 查找 UrlTemplate、UrlTemplateMatch。
  • @John: 刚试过这个......搜索结果在谷歌返回......这个问题:) 你会发布一个详细的答案吗?
  • 我刚刚(昨天)读到了它们,还没有使用它们。见msdn.microsoft.com/en-us/library/bb675245.aspx。

标签: c# asp.net-mvc routing


【解决方案1】:

这很简单,路由系统在应用启动时初始化,它根据当前上下文计算路由数据,所以只要上下文本身是当前的,就万事大吉了。

以 Global.asax 的 Application_BeginRequest 方法为例,可以这样获取当前路由数据:

var routedata = RouteTable.Routes.GetRouteData(new HttpContextWrapper(Context));

routedata 又将当前请求的 RouteValueDictionary 存储在其 Values 属性中,并将数据令牌存储在 DataTokens 属性中。

保罗

【讨论】:

  • 我必须安排一些时间来检查一下,但它看起来正是我所追求的。
【解决方案2】:

MVC 已经为您做到了。您可以访问控制器内部的 RouteData 属性。

如果你在 MVC 路由逻辑之前定义了你想在哪里截取路由数据,我可能会回答得更好。

【讨论】:

  • 我已经考虑过这一点,但我目前正在使用 HttpApplication.BeginRequest 方法中的 url - 我相信在路由系统有机会获取 URL 之前调用了该方法。我希望有某种方法可以简单地调用一些路由方法并让它从 url 返回一个 RouteData。
【解决方案3】:

您是否尝试过在“/”字符上拆分字符串?这将为您提供路径部分的有序数组。

var parts = url.substring(1).Split('/');
var controller = parts[0];
var action = parts[1];
var id = parts[2];

【讨论】:

  • 我真的需要看看路由系统如何看待它——而不仅仅是 URL 被分解。使用中的某些路由有多个参数,因此 url 拆分将无法正常工作。
猜你喜欢
  • 2013-06-22
  • 1970-01-01
  • 1970-01-01
  • 2011-09-27
  • 1970-01-01
  • 2020-12-12
  • 2018-10-08
  • 2017-04-28
  • 1970-01-01
相关资源
最近更新 更多