Example #1
0
        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("}");
        }
Example #3
0
 /// <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));
 }
Example #4
0
        /// <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());
        }