private static string BuildRoutePart(RoutePatternPart part) { return(part switch { RoutePatternLiteralPart lit => lit.Content, RoutePatternParameterPart param => $"{{{param.Name}}}", RoutePatternSeparatorPart sep => sep.Content, _ => string.Empty });
public string GetResourceId(RouteEndpoint routeEndpoint) { StringBuilder templateBuilder = new StringBuilder(); IEnumerable <RoutePatternPathSegment> pathSegments = routeEndpoint.RoutePattern.PathSegments; if (pathSegments.IsNullOrEmpty()) { return(null); } IDictionary <string, object> values = GetRequiredValues(); foreach (RoutePatternPathSegment segment in pathSegments) { templateBuilder.Append("/"); foreach (RoutePatternPart part in segment.Parts) { if (part.IsLiteral) { RoutePatternLiteralPart literalPart = part as RoutePatternLiteralPart; templateBuilder.Append(literalPart.Content); } else if (part.IsSeparator) { RoutePatternSeparatorPart separatorPart = part as RoutePatternSeparatorPart; templateBuilder.Append(separatorPart.Content); } else { RoutePatternParameterPart parameterPart = part as RoutePatternParameterPart; templateBuilder.Append("{"); if (parameterPart.IsCatchAll) { templateBuilder.Append("*"); if (!parameterPart.EncodeSlashes) { templateBuilder.Append("*"); } } if (values.ContainsKey(parameterPart.Name)) { templateBuilder.Append(values[parameterPart.Name]); } else { templateBuilder.Append(parameterPart.Name); } if (parameterPart.IsOptional) { templateBuilder.Append("?"); } //需不要考虑规则呢? 例如5:int //if (!parameterPart.ParameterPolicies.IsNullOrEmpty()) //{ //} templateBuilder.Append("}"); } } } return(templateBuilder.ToString()); }
private bool Equals(RoutePatternLiteralPart x, RoutePatternLiteralPart y) { return(x.Content == y.Content); }