/// <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(); foreach (var pathParameter in ParameterTemplateModels.Where(p => p.Location == ParameterLocation.Path)) { builder.AppendLine("{0} = {0}.Replace(\"{{{1}}}\", Uri.EscapeDataString({2}));", variableName, pathParameter.SerializedName, pathParameter.Type.ToString(ClientReference, pathParameter.Name)); } if (ParameterTemplateModels.Any(p => p.Location == ParameterLocation.Query)) { builder.AppendLine("List<string> queryParameters = new List<string>();"); foreach (var queryParameter in ParameterTemplateModels .Where(p => p.Location == ParameterLocation.Query)) { builder.AppendLine("if ({0} != null)", queryParameter.Name) .AppendLine("{").Indent() .AppendLine("queryParameters.Add(string.Format(\"{0}={{0}}\", Uri.EscapeDataString({1})));", queryParameter.SerializedName, queryParameter.GetFormattedReferenceValue(ClientReference)).Outdent() .AppendLine("}"); } builder.AppendLine("if (queryParameters.Count > 0)") .AppendLine("{").Indent() .AppendLine("{0} += \"?\" + string.Join(\"&\", queryParameters);", variableName).Outdent() .AppendLine("}"); } return(builder.ToString()); }
private void AddQueryParametersToUri(string variableName, IndentedStringBuilder builder) { builder.AppendLine("List<string> queryParameters = new List<string>();"); if (ParameterTemplateModels.Any(p => p.Location == ParameterLocation.Query)) { foreach (var queryParameter in ParameterTemplateModels .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(ParameterTemplateModels.Any(p => p.Location == ParameterLocation.Query)); }