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); }
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); }
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)); }
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("/"); } }
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); }