这个类主要是分析 routeTemplate(字符串) 返回: RouteTemplate(对象)
private const char Separator = '/'; //Segment 分隔符号
private const char OpenBrace = '{'; //参数开始符号
private const char CloseBrace = '}'; //参数结束符号
private const char EqualsSign = '='; //默认值
private const char QuestionMark = '?'; //可选
private const char Asterisk = '*'; //CatchAll
private const string PeriodString = "."; //可选参数前面的.符号是 可选的
Parser 方法代码为:
public static RouteTemplate Parse(string routeTemplate)
{
if (routeTemplate == null)
{
routeTemplate = String.Empty;
}
// 不能以 ~ 或者 / 开始
if (IsInvalidRouteTemplate(routeTemplate))
{
throw new ArgumentException(Resources.TemplateRoute_InvalidRouteTemplate, "routeTemplate");
}
var context = new TemplateParserContext(routeTemplate);
var segments = new List<TemplateSegment>();
while (context.Next())
{
if (context.Current == Separator)
{
// If we get here is means that there's a consecutive '/' character.
// Templates don't start with a '/' and parsing a segment consumes the separator.
throw new ArgumentException(Resources.TemplateRoute_CannotHaveConsecutiveSeparators,
"routeTemplate");
}
else
{
if (!ParseSegment(context, segments))
{
throw new ArgumentException(context.Error, "routeTemplate");
}
}
}
//catchAll 如果有必须是最后一个参数
if (IsAllValid(context, segments))
{
return new RouteTemplate(segments);
}
else
{
throw new ArgumentException(context.Error, "routeTemplate");
}
}
浙公网安备 33010602011771号