基本上,我需要从路由字符串中获取一组路由值键。正则表达式看起来很像,但我似乎无法理解正则表达式。
从"{controller}/{action}/{id}"
对于一个string[]
有价值观的人,"controller", "action", "id"
这是我得到的最接近的Regex.Split(url, "/{(.*?)}/");
但我得到了不寻常的结果:"{controller}", "action", "{id}"
基本上,我需要从路由字符串中获取一组路由值键。正则表达式看起来很像,但我似乎无法理解正则表达式。
从"{controller}/{action}/{id}"
对于一个string[]
有价值观的人,"controller", "action", "id"
这是我得到的最接近的Regex.Split(url, "/{(.*?)}/");
但我得到了不寻常的结果:"{controller}", "action", "{id}"
避免使用正则表达式可能要便宜得多。尝试:
var myRoute = "{controller}/{action}/{id}";
string[] results = myRoute.Split(new[] { '{', '}', '/' }, StringSplitOptions.RemoveEmptyEntries);
实际上,您可以调用,例如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 的所有键,不带花括号。
不需要正则表达式:
List<string> parts = str.Split('/').Select(p => p.Trim(new []{ '}', '{' })).ToList();