如何通过Regex从自定义Route构造函数中的url参数获取路径数据键?

时间:2013-06-03 14:58:23

标签: c# asp.net-mvc regex

基本上,我需要从路由字符串中获取一系列路由值键。 Regex看起来很像,但我似乎无法让正则表达式失效。

来自"{controller}/{action}/{id}"

使用值string[]

"controller", "action", "id"

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

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

3 个答案:

答案 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();