private static string BuildRoutePart(RoutePatternPart part)
 {
     return(part switch
     {
         RoutePatternLiteralPart lit => lit.Content,
         RoutePatternParameterPart param => $"{{{param.Name}}}",
         RoutePatternSeparatorPart sep => sep.Content,
         _ => string.Empty
     });
Пример #2
0
        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());
        }
Пример #3
0
 private bool Equals(RoutePatternLiteralPart x, RoutePatternLiteralPart y)
 {
     return(x.Content == y.Content);
 }