简体   繁体   English

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

[英]How to get route data keys from url parameter in custom Route constructor via Regex?

Basically, I need to get an array of route value keys from a route string. 基本上,我需要从路由字符串中获取一组路由值键。 Regex is looking like the way, but I can't seem to get the regex down. 正则表达式看起来像这样,但我似乎无法降低正则表达式。

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

To a string[] with values, "controller", "action", "id" 带有值的string[]"controller", "action", "id"

Here's the closest I got Regex.Split(url, "/{(.*?)}/"); 这是我最接近Regex.Split(url, "/{(.*?)}/");

But I'm getting unusual results: "{controller}", "action", "{id}" 但是我得到了不寻常的结果: "{controller}", "action", "{id}"

It's probably alot cheaper to avoid Regex. 避免正则表达式可能要便宜很多。 Try: 尝试:

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

Actually, you can call someContext.RouteData.Values.Keys.ToArray() , where someContext can be RequestContext , for example. 其实,你可以调用someContext.RouteData.Values.Keys.ToArray()其中someContext可以RequestContext ,例如。 Make sure that you import System.Linq namespace to get ToArray() extension method. 确保导入System.Linq命名空间以获取ToArray()扩展方法。

If you want to do it through an action you will need to do it through ControllerContext. 如果您想通过操作执行此操作,则需要通过ControllerContext执行此操作。 For example, 例如,

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

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

You will get all the keys that belong to the currently chosen Route without curly braces. 您将获得属于当前所选Route的所有键,而不需要花括号。

不需要正则表达式:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM