private void AddQueryParametersToUri(string variableName, IndentedStringBuilder builder) { builder.AppendLine("System.Collections.Generic.List<string> _queryParameters = new System.Collections.Generic.List<string>();"); if (LogicalParameters.Any(p => p.Location == ParameterLocation.Query)) { foreach (var queryParameter in LogicalParameters .Where(p => p.Location == ParameterLocation.Query).Select(p => p as ParameterCsa)) { string queryParametersAddString = "_queryParameters.Add(string.Format(\"{0}={{0}}\", System.Uri.EscapeDataString({1})));"; if (queryParameter.IsODataFilterExpression) { queryParametersAddString = @"var _odataFilter = {2}.ToString(); if (!string.IsNullOrEmpty(_odataFilter)) {{ _queryParameters.Add(_odataFilter); }}"; } else if (queryParameter.Extensions.ContainsKey(AzureExtensions.SkipUrlEncodingExtension)) { queryParametersAddString = "_queryParameters.Add(string.Format(\"{0}={{0}}\", {1}));"; } builder.AppendLine("if ({0} != null)", queryParameter.Name) .AppendLine("{").Indent(); if (queryParameter.CollectionFormat == CollectionFormat.Multi) { builder.AppendLine("if ({0}.Count == 0)", queryParameter.Name) .AppendLine("{").Indent() .AppendLine(queryParametersAddString, queryParameter.SerializedName, "string.Empty").Outdent() .AppendLine("}") .AppendLine("else") .AppendLine("{").Indent() .AppendLine("foreach (var _item in {0})", queryParameter.Name) .AppendLine("{").Indent() .AppendLine(queryParametersAddString, queryParameter.SerializedName, "_item ?? string.Empty").Outdent() .AppendLine("}").Outdent() .AppendLine("}").Outdent(); } else { builder.AppendLine(queryParametersAddString, queryParameter.SerializedName, queryParameter.GetFormattedReferenceValue(ClientReference), queryParameter.Name); } builder.Outdent() .AppendLine("}"); } } builder.AppendLine("if (_queryParameters.Count > 0)") .AppendLine("{").Indent() .AppendLine("{0} += ({0}.Contains(\"?\") ? \"&\" : \"?\") + string.Join(\"&\", _queryParameters);", variableName).Outdent() .AppendLine("}"); }
private void AddQueryParametersToUri(string variableName, IndentedStringBuilder builder) { builder.AppendLine("List<string> queryParameters = new List<string>();"); if (LogicalParameters.Any(p => p.Location == ParameterLocation.Query)) { foreach (var queryParameter in LogicalParameters .Where(p => p.Location == ParameterLocation.Query)) { string queryParametersAddString = "queryParameters.Add(string.Format(\"{0}={{0}}\", Uri.EscapeDataString({1})));"; if (queryParameter.SerializedName.Equals("$filter", StringComparison.OrdinalIgnoreCase) && queryParameter.Type is CompositeType && queryParameter.Location == ParameterLocation.Query) { queryParametersAddString = "queryParameters.Add(string.Format(\"{0}={{0}}\", FilterString.Generate(filter)));"; } else if (queryParameter.Extensions.ContainsKey(AzureCodeGenerator.SkipUrlEncodingExtension)) { queryParametersAddString = "queryParameters.Add(string.Format(\"{0}={{0}}\", {1}));"; } builder.AppendLine("if ({0} != null)", queryParameter.Name) .AppendLine("{").Indent() .AppendLine(queryParametersAddString, queryParameter.SerializedName, queryParameter.GetFormattedReferenceValue(ClientReference)) .Outdent() .AppendLine("}"); } } builder.AppendLine("if (queryParameters.Count > 0)") .AppendLine("{").Indent() .AppendLine("{0} += \"?\" + string.Join(\"&\", queryParameters);", variableName).Outdent() .AppendLine("}"); }
/// <summary> /// Detremines whether the Uri will have any query string /// </summary> /// <returns>True if a query string is possible given the method parameters, otherwise false</returns> protected virtual bool HasQueryParameters() { return(LogicalParameters.Any(p => p.Location == ParameterLocation.Query)); }
/// <summary> /// Generate code to build the URL from a url expression and method parameters /// </summary> /// <param name="variableName">The variable to store the url in.</param> /// <returns></returns> public virtual string BuildUrl(string variableName) { var builder = new IndentedStringBuilder(); builder.AppendLine("var queryParameters = new Dictionary<string,object>();"); foreach (var pathParameter in LogicalParameters.Where(p => p.Location == ParameterLocation.Path)) { var replaceString = "queryParameters.Add(\"{0}\",{1});"; var urlPathName = pathParameter.SerializedName; if (pathParameter.ModelType is SequenceType) { builder.AppendLine(replaceString, urlPathName, pathParameter.GetFormattedReferenceValue(ClientReference)); } else { builder.AppendLine(replaceString, urlPathName, pathParameter.ModelType.ToString(ClientReference, pathParameter.Name)); } } if (LogicalParameters.Any(p => p.Location == ParameterLocation.Query)) { foreach (var queryParameter in LogicalParameters.Where(p => p.Location == ParameterLocation.Query)) { var replaceString = "queryParameters.Add(\"{0}\",{1});"; if ((queryParameter as ParameterCs).IsNullable()) { builder.Append($"if ({queryParameter.Name} != null)"); } if (queryParameter.CollectionFormat == CollectionFormat.Multi) { if ((queryParameter as ParameterCs).IsNullable()) { builder .AppendLine("{").Indent(); } builder.AppendLine("if ({0}.Count == 0)", queryParameter.Name) .AppendLine("{").Indent() .AppendLine(replaceString, queryParameter.SerializedName, "string.Empty").Outdent() .AppendLine("}") .AppendLine("else") .AppendLine("{").Indent() .AppendLine("foreach (var _item in {0})", queryParameter.Name) .AppendLine("{").Indent() .AppendLine(replaceString, queryParameter.SerializedName, "_item.ToString() ?? string.Empty").Outdent() .AppendLine("}").Outdent() .AppendLine("}").Outdent(); if ((queryParameter as ParameterCs).IsNullable()) { builder .AppendLine("}").Indent(); } } else { builder.AppendLine(replaceString, queryParameter.SerializedName, queryParameter.GetFormattedReferenceValue(ClientReference)); } } } return(builder.ToString()); }