예제 #1
0
파일: RouteInfo.cs 프로젝트: freemsly/CMS
        private void GetSegments(string route)
        {
            var rx = new Regex(@"^(?<isToken>{)?(?(isToken)(?<isGreedy>\*?))(?<name>[a-zA-Z0-9-_]+)(?(isToken)})$", RegexOptions.Compiled | RegexOptions.Singleline);
            foreach (string segment in route.Split('/'))
            {
                // segment must not be empty
                if (string.IsNullOrEmpty(segment))
                {
                    throw new ArgumentException("Route URL is invalid. Sequence \"//\" is not allowed.", "url");
                }

                if (rx.IsMatch(segment))
                {
                    var m = rx.Match(segment);
                    var s = new RouteSegment
                    {
                        IsToken = m.Groups["isToken"].Value.Length.Equals(1),
                        IsGreedy = m.Groups["isGreedy"].Value.Length.Equals(1),
                        Name = m.Groups["name"].Value
                    };
                    _segments.AddLast(s);
                    _hasGreedy |= s.IsGreedy;

                    continue;
                }
                throw new ArgumentException("Route URL is invalid.", "url");
            }
        }