PostmanRequest GetApiActionDescription(ApiDescription apiDescription, PostmanCollection postManCollection) { TextSample sampleData = null; var sampleDictionary = helpPageSampleGenerator.GetSample(apiDescription, SampleDirection.Request); var mediaTypeHeader = GetMediaTypeHeaderValue(); if (sampleDictionary.ContainsKey(mediaTypeHeader)) { sampleData = sampleDictionary[mediaTypeHeader] as TextSample; } var nv = new NameValueCollection(); foreach (var parameter in apiDescription.ParameterDescriptions) { var sampleObject = helpPageSampleGenerator.GetSampleObject(parameter.ParameterDescriptor.ParameterType); nv.Add(parameter.Name, sampleObject == null ? string.Empty : sampleObject.ToString()); } var questionMark = apiDescription.RelativePath.IndexOf("?", StringComparison.Ordinal); var cleanedUrlParameterUrl = apiDescription.RelativePath; if (questionMark >= 0) { var queryString = nv.ConvertToQueryString(); cleanedUrlParameterUrl = apiDescription.RelativePath.Remove(questionMark); cleanedUrlParameterUrl += "?" + queryString; } // get path variables from url var pathVariables = pathVariableRegEx.Matches(cleanedUrlParameterUrl) .Cast <Match>() .Select(m => m.Value) .Select(s => s.Substring(1, s.Length - 2)) .ToDictionary(s => s, s => string.Format("{0}-value", s)); // change format of parameters within string to be colon prefixed rather than curly brace wrapped var postmanReadyUrl = pathVariableRegEx.Replace(cleanedUrlParameterUrl, ":$1"); // prefix url with base uri var url = string.Format("{0}/{1}", baseUri.TrimEnd('/'), postmanReadyUrl); var headers = new Dictionary <string, string> { { "Content-Type", "application/json" } }; var sample = sampleData != null ? sampleData.Text : null; var relativePath = string.Format("/{0}", apiDescription.RelativePath); var request = CreatePostmanRequest(postManCollection, apiDescription.HttpMethod.Method, relativePath, url, headers, sample, "raw", apiDescription.Documentation); request.PathVariables = pathVariables; return(request); }