将Sinatra路由转换为.NET路由

时间:2011-02-13 02:52:07

标签: .net regex routing sinatra

我不是Regex-Ninja,并且想知道是否有可能重构我的代码以将Sinata样式路由/:foo/:bar转换为.NET样式路由/{foo}/{bar}。以下代码是我目前的实现,希望有一个更清洁(可能是正则表达式?)的解决方案。

    private static string Convert(string input)
    {
        string output = "/";
        var segments = input.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries);

        foreach (var segment in segments)
            if (segment.StartsWith(":"))
                output += "{" + segment.TrimStart(':') + "}/";
            else
                output += segment + "/";

        if (output.Length > 1)
            output = output.TrimEnd('/');

        return output;
    }

1 个答案:

答案 0 :(得分:2)

这就是你的意思:

var replace = Regex.Replace("/bar/:foo/:lar", "/:([^/]*)", "/{$1}");