基本上,我需要从路由字符串中获取一系列路由值键。 Regex看起来很像,但我似乎无法让正则表达式失效。
来自"{controller}/{action}/{id}"
使用值string[]
"controller", "action", "id"
这是我最接近的Regex.Split(url, "/{(.*?)}/");
但我得到了不寻常的结果:"{controller}", "action", "{id}"
答案 0 :(得分:2)
var myRoute = "{controller}/{action}/{id}";
string[] results = myRoute.Split(new[] { '{', '}', '/' }, StringSplitOptions.RemoveEmptyEntries);
答案 1 :(得分: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);
}
您将获得所有属于当前所选路线但没有花括号的键。
答案 2 :(得分:0)
不需要正则表达式:
List<string> parts = str.Split('/').Select(p => p.Trim(new []{ '}', '{' })).ToList();