public static void ProcessParameterizedHost(ServiceClient serviceClient, Settings settings) { if (serviceClient == null) { throw new ArgumentNullException("serviceClient"); } if (settings == null) { throw new ArgumentNullException("settings"); } if (serviceClient.Extensions.ContainsKey(ParameterizedHostExtension) && !hostChecked) { SwaggerModeler modeler = new SwaggerModeler(settings); modeler.Build(); var hostExtension = serviceClient.Extensions[ParameterizedHostExtension] as JObject; if (hostExtension != null) { var hostTemplate = (string)hostExtension["hostTemplate"]; var parametersJson = hostExtension["parameters"].ToString(); if (!string.IsNullOrEmpty(parametersJson)) { var jsonSettings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.None, MetadataPropertyHandling = MetadataPropertyHandling.Ignore }; var swaggerParams = JsonConvert.DeserializeObject<List<SwaggerParameter>>(parametersJson, jsonSettings); foreach (var swaggerParameter in swaggerParams) { // Build parameter var parameterBuilder = new ParameterBuilder(swaggerParameter, modeler); var parameter = parameterBuilder.Build(); // check to see if the parameter exists in properties, and needs to have its name normalized if (serviceClient.Properties.Any(p => p.SerializedName.Equals(parameter.SerializedName))) { parameter.ClientProperty = serviceClient.Properties.Single(p => p.SerializedName.Equals(parameter.SerializedName)); } parameter.Extensions["hostParameter"] = true; foreach (var method in serviceClient.Methods) { method.Parameters.Add(parameter); } } serviceClient.BaseUrl = string.Format(CultureInfo.InvariantCulture, "{0}://{1}{2}", modeler.ServiceDefinition.Schemes[0].ToString().ToLowerInvariant(), hostTemplate, modeler.ServiceDefinition.BasePath); } } } hostChecked = true; }
public static void ProcessParameterizedHost(ServiceClient serviceClient, Settings settings) { if (serviceClient == null) { throw new ArgumentNullException("serviceClient"); } if (settings == null) { throw new ArgumentNullException("settings"); } if (serviceClient.Extensions.ContainsKey(ParameterizedHostExtension) && !hostChecked) { SwaggerModeler modeler = new SwaggerModeler(settings); modeler.Build(); var hostExtension = serviceClient.Extensions[ParameterizedHostExtension] as JObject; if (hostExtension != null) { var hostTemplate = (string)hostExtension["hostTemplate"]; var parametersJson = hostExtension["parameters"].ToString(); var useSchemePrefix = true; if (hostExtension[UseSchemePrefix] != null) { useSchemePrefix = bool.Parse(hostExtension[UseSchemePrefix].ToString()); } var position = "first"; if (hostExtension[PositionInOperation] != null) { var pat = "^(fir|la)st$"; Regex r = new Regex(pat, RegexOptions.IgnoreCase); var text = hostExtension[PositionInOperation].ToString(); Match m = r.Match(text); if (!m.Success) { throw new InvalidOperationException(string.Format(CultureInfo.InvariantCulture, Resources.InvalidExtensionProperty, text, PositionInOperation, ParameterizedHostExtension, "first, last")); } position = text; } if (!string.IsNullOrEmpty(parametersJson)) { var jsonSettings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.None, MetadataPropertyHandling = MetadataPropertyHandling.Ignore }; var swaggerParams = JsonConvert.DeserializeObject<List<SwaggerParameter>>(parametersJson, jsonSettings); List<Parameter> hostParamList = new List<Parameter>(); foreach (var swaggerParameter in swaggerParams) { // Build parameter var parameterBuilder = new ParameterBuilder(swaggerParameter, modeler); var parameter = parameterBuilder.Build(); // check to see if the parameter exists in properties, and needs to have its name normalized if (serviceClient.Properties.Any(p => p.SerializedName.Equals(parameter.SerializedName))) { parameter.ClientProperty = serviceClient.Properties.Single(p => p.SerializedName.Equals(parameter.SerializedName)); } parameter.Extensions["hostParameter"] = true; hostParamList.Add(parameter); } foreach (var method in serviceClient.Methods) { if (position.Equals("first", StringComparison.OrdinalIgnoreCase)) { method.Parameters.InsertRange(0, hostParamList); } else { method.Parameters.AddRange(hostParamList); } } if (useSchemePrefix) { serviceClient.BaseUrl = string.Format(CultureInfo.InvariantCulture, "{0}://{1}{2}", modeler.ServiceDefinition.Schemes[0].ToString().ToLowerInvariant(), hostTemplate, modeler.ServiceDefinition.BasePath); } else { serviceClient.BaseUrl = string.Format(CultureInfo.InvariantCulture, "{0}{1}", hostTemplate, modeler.ServiceDefinition.BasePath); } } } } hostChecked = true; }