如何通过正则表达式从自定义路由构造函数中的url参数中获取路由数据键

本文关键字:路由 参数 url 获取 数据 构造函数 何通过 正则表达式 自定义 | 更新日期: 2023-09-27 18:16:54

基本上,我需要从路由字符串中获得路由值键的数组。正则表达式看起来像这样,但我似乎不能得到正则表达式下来。

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

到一个有值的string[], "controller", "action", "id"

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

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

如何通过正则表达式从自定义路由构造函数中的url参数中获取路由数据键

避免使用Regex可能要便宜得多。试一试:

var myRoute = "{controller}/{action}/{id}";
string[] results = myRoute.Split(new[] { '{', '}', '/' }, StringSplitOptions.RemoveEmptyEntries);

实际上,您可以调用someContext.RouteData.Values.Keys.ToArray(),其中someecontext可以是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);
}

你会得到所有属于当前所选路由的键值,而不带花括号。

不需要regex:

List<string> parts = str.Split('/').Select(p => p.Trim(new []{ '}', '{' })).ToList();