1

基本上,我需要从路由字符串中获取一组路由值键。正则表达式看起来很像,但我似乎无法理解正则表达式。

"{controller}/{action}/{id}"

对于一个string[]有价值观的人,"controller", "action", "id"

这是我得到的最接近的Regex.Split(url, "/{(.*?)}/");

但我得到了不寻常的结果:"{controller}", "action", "{id}"

4

3 回答 3

2

避免使用正则表达式可能要便宜得多。尝试:

var myRoute = "{controller}/{action}/{id}";
string[] results = myRoute.Split(new[] { '{', '}', '/' }, StringSplitOptions.RemoveEmptyEntries);
于 2013-06-03T15:19:21.757 回答
1

实际上,您可以调用,例如someContext.RouteData.Values.Keys.ToArray()someContext 可以是。RequestContext确保导入 System.Linq 命名空间以获取ToArray()扩展方法。

如果你想通过一个动作来做,你需要通过 ControllerContext 来做。例如,

public ActionResult Index()
{
    var routeDataKeys = ControllerContext.RouteData.Values.Keys.ToArray();
    var content = String.Empty;

    foreach (var key in routeDataKeys)
    {
        content += "   " + key;
    }
    return Content(content);
}

您将获得属于当前选择的 Route 的所有键,不带花括号。

于 2013-06-03T15:23:51.223 回答
0

不需要正则表达式:

List<string> parts = str.Split('/').Select(p => p.Trim(new []{ '}', '{' })).ToList();
于 2013-06-03T15:13:52.263 回答