Beispiel #1
0
        /// <inheritdoc />
        public string MakeRelativeUri(IUriComponents components)
        {
            var hasFilter = components.Conditions.Any();
            var hasOther  = components.MetaConditions.Any();

            using (var b = new StringWriter())
            {
                b.Write('/');
                b.Write(components.ResourceSpecifier);
                if (hasFilter || hasOther)
                {
                    b.Write('?');
                    if (hasFilter)
                    {
                        b.Write("$filter=");
                        var conds = components.Conditions.Select(c => $"{c.Key} {GetOperatorString(c.Operator)} {c.ValueLiteral}");
                        b.Write(string.Join(" and ", conds));
                    }

                    if (hasOther)
                    {
                        if (hasFilter)
                        {
                            b.Write("&");
                        }
                        var conds = components.MetaConditions.Select(c => c.Key switch
                        {
                            "order_asc" => $"$orderby={c.ValueLiteral} asc",
                            "order_desc" => $"$orderby={c.ValueLiteral} desc",
                            "select" => $"$select={c.ValueLiteral}",
                            "offset" => $"$skip={c.ValueLiteral}",
                            "limit" => $"$top={c.ValueLiteral}",
                            "search" => $"$search={c.ValueLiteral}",
                            _ => ""
                        });
Beispiel #2
0
 private void Populate(IUriComponents components)
 {
     ResourceSpecifier = components.ResourceSpecifier;
     ViewName          = components.ViewName;
     Conditions        = components.Conditions;
     MetaConditions    = components.MetaConditions;
     Macro             = components.Macro;
 }
Beispiel #3
0
 internal UriComponents(IUriComponents existing)
 {
     ProtocolIdentifier = existing.ProtocolIdentifier;
     ResourceSpecifier  = existing.ResourceSpecifier;
     ViewName           = existing.ViewName;
     Conditions         = existing.Conditions.ToList();
     MetaConditions     = existing.MetaConditions.ToList();
     Macro = existing.Macro;
 }
        private static string ToUriString(IUriComponents components)
        {
            var view     = components.ViewName != null ? $"-{components.ViewName}" : null;
            var resource = components.Macro == null ? $"/{components.ResourceSpecifier}{view}" : $"/${components.Macro.Name}";
            var str      = new StringBuilder(resource);

            if (components.Conditions.Count > 0)
            {
                str.Append($"/{ToUriString(components.Conditions)}");
                if (components.MetaConditions.Count > 0)
                {
                    str.Append($"/{UnescapeMetaconditions(ToUriString(components.MetaConditions))}");
                }
            }
            else if (components.MetaConditions.Count > 0)
            {
                str.Append($"/_/{UnescapeMetaconditions(ToUriString(components.MetaConditions))}");
            }
            return(str.ToString());
        }
 /// <inheritdoc />
 public string MakeRelativeUri(IUriComponents components) => ToUriString(components);