示例#1
0
        public override bool IsEquivalentTo(UriTemplatePathSegment other, bool ignoreTrailingSlash)
        {
            if (other == null)
            {
                return(false);
            }
            if (!ignoreTrailingSlash && (base.EndsWithSlash != other.EndsWithSlash))
            {
                return(false);
            }
            UriTemplateCompoundPathSegment segment = other as UriTemplateCompoundPathSegment;

            if (segment == null)
            {
                return(false);
            }
            if (this.varLitPairs.Count != segment.varLitPairs.Count)
            {
                return(false);
            }
            if (StringComparer.OrdinalIgnoreCase.Compare(this.firstLiteral, segment.firstLiteral) != 0)
            {
                return(false);
            }
            for (int i = 0; i < this.varLitPairs.Count; i++)
            {
                VarAndLitPair pair  = this.varLitPairs[i];
                VarAndLitPair pair2 = segment.varLitPairs[i];
                if (StringComparer.OrdinalIgnoreCase.Compare(pair.Literal, pair2.Literal) != 0)
                {
                    return(false);
                }
            }
            return(true);
        }
示例#2
0
        private bool TryLookup(string segment, NameValueCollection boundParameters)
        {
            int startIndex = 0;

            if (!string.IsNullOrEmpty(this.firstLiteral))
            {
                if (!segment.StartsWith(this.firstLiteral, StringComparison.Ordinal))
                {
                    return(false);
                }
                startIndex = this.firstLiteral.Length;
            }
            for (int i = 0; i < (this.varLitPairs.Count - 1); i++)
            {
                VarAndLitPair pair = this.varLitPairs[i];
                int           num3 = segment.IndexOf(pair.Literal, startIndex, StringComparison.Ordinal);
                if (num3 < (startIndex + 1))
                {
                    return(false);
                }
                if (boundParameters != null)
                {
                    string        str   = segment.Substring(startIndex, num3 - startIndex);
                    VarAndLitPair pair2 = this.varLitPairs[i];
                    boundParameters.Add(pair2.VarName, str);
                }
                VarAndLitPair pair3 = this.varLitPairs[i];
                startIndex = num3 + pair3.Literal.Length;
            }
            if (startIndex < segment.Length)
            {
                VarAndLitPair pair4 = this.varLitPairs[this.varLitPairs.Count - 1];
                if (string.IsNullOrEmpty(pair4.Literal))
                {
                    if (boundParameters != null)
                    {
                        VarAndLitPair pair5 = this.varLitPairs[this.varLitPairs.Count - 1];
                        boundParameters.Add(pair5.VarName, segment.Substring(startIndex));
                    }
                    return(true);
                }
                VarAndLitPair pair6 = this.varLitPairs[this.varLitPairs.Count - 1];
                if ((startIndex + pair6.Literal.Length) < segment.Length)
                {
                    VarAndLitPair pair7 = this.varLitPairs[this.varLitPairs.Count - 1];
                    if (segment.EndsWith(pair7.Literal, StringComparison.Ordinal))
                    {
                        if (boundParameters != null)
                        {
                            VarAndLitPair pair8 = this.varLitPairs[this.varLitPairs.Count - 1];
                            VarAndLitPair pair9 = this.varLitPairs[this.varLitPairs.Count - 1];
                            boundParameters.Add(pair8.VarName, segment.Substring(startIndex, (segment.Length - startIndex) - pair9.Literal.Length));
                        }
                        return(true);
                    }
                }
            }
            return(false);
        }
示例#3
0
        private int CompareSuffixToOtherSuffix(UriTemplateCompoundPathSegment other)
        {
            VarAndLitPair pair  = this.varLitPairs[this.varLitPairs.Count - 1];
            string        strB  = ReverseString(pair.Literal);
            VarAndLitPair pair2 = other.varLitPairs[other.varLitPairs.Count - 1];

            return(string.Compare(ReverseString(pair2.Literal), strB, StringComparison.OrdinalIgnoreCase));
        }
示例#4
0
 public override void Bind(string[] values, ref int valueIndex, StringBuilder path)
 {
     path.Append(this.firstLiteral);
     for (int i = 0; i < this.varLitPairs.Count; i++)
     {
         path.Append(values[valueIndex++]);
         VarAndLitPair pair = this.varLitPairs[i];
         path.Append(pair.Literal);
     }
     if (base.EndsWithSlash)
     {
         path.Append("/");
     }
 }
示例#5
0
        public static UriTemplateCompoundPathSegment CreateFromUriTemplate(string segment, UriTemplate template)
        {
            string originalSegment = segment;
            bool   endsWithSlash   = segment.EndsWith("/", StringComparison.Ordinal);

            if (endsWithSlash)
            {
                segment = segment.Remove(segment.Length - 1);
            }
            int    index            = segment.IndexOf("{", StringComparison.Ordinal);
            string stringToUnescape = (index > 0) ? segment.Substring(0, index) : string.Empty;

            if (stringToUnescape.IndexOf("*", StringComparison.Ordinal) != -1)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new FormatException(System.ServiceModel.SR.GetString("UTInvalidWildcardInVariableOrLiteral", new object[] { template.originalTemplate, "*" })));
            }
            UriTemplateCompoundPathSegment segment2 = new UriTemplateCompoundPathSegment(originalSegment, endsWithSlash, (stringToUnescape != string.Empty) ? Uri.UnescapeDataString(stringToUnescape) : string.Empty);

            do
            {
                bool   flag2;
                string str4;
                int    num2 = segment.IndexOf("}", index + 1, StringComparison.Ordinal);
                if (num2 < (index + 2))
                {
                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new FormatException(System.ServiceModel.SR.GetString("UTInvalidFormatSegmentOrQueryPart", new object[] { segment })));
                }
                string varName = template.AddPathVariable(UriTemplatePartType.Compound, segment.Substring(index + 1, (num2 - index) - 1), out flag2);
                if (flag2)
                {
                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(System.ServiceModel.SR.GetString("UTDefaultValueToCompoundSegmentVar", new object[] { template, originalSegment, varName })));
                }
                index = segment.IndexOf("{", num2 + 1, StringComparison.Ordinal);
                if (index > 0)
                {
                    if (index == (num2 + 1))
                    {
                        throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgument("template", System.ServiceModel.SR.GetString("UTDoesNotSupportAdjacentVarsInCompoundSegment", new object[] { template, segment }));
                    }
                    str4 = segment.Substring(num2 + 1, (index - num2) - 1);
                }
                else if ((num2 + 1) < segment.Length)
                {
                    str4 = segment.Substring(num2 + 1);
                }
                else
                {
                    str4 = string.Empty;
                }
                if (str4.IndexOf("*", StringComparison.Ordinal) != -1)
                {
                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new FormatException(System.ServiceModel.SR.GetString("UTInvalidWildcardInVariableOrLiteral", new object[] { template.originalTemplate, "*" })));
                }
                if (str4.IndexOf('}') != -1)
                {
                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new FormatException(System.ServiceModel.SR.GetString("UTInvalidFormatSegmentOrQueryPart", new object[] { segment })));
                }
                segment2.varLitPairs.Add(new VarAndLitPair(varName, (str4 == string.Empty) ? string.Empty : Uri.UnescapeDataString(str4)));
            }while (index > 0);
            if (string.IsNullOrEmpty(segment2.firstLiteral))
            {
                VarAndLitPair pair = segment2.varLitPairs[segment2.varLitPairs.Count - 1];
                if (string.IsNullOrEmpty(pair.Literal))
                {
                    segment2.csClass = CompoundSegmentClass.HasNoPrefixNorSuffix;
                    return(segment2);
                }
                segment2.csClass = CompoundSegmentClass.HasOnlySuffix;
                return(segment2);
            }
            VarAndLitPair pair2 = segment2.varLitPairs[segment2.varLitPairs.Count - 1];

            if (string.IsNullOrEmpty(pair2.Literal))
            {
                segment2.csClass = CompoundSegmentClass.HasOnlyPrefix;
                return(segment2);
            }
            segment2.csClass = CompoundSegmentClass.HasPrefixAndSuffix;
            return(segment2);
        }