コード例 #1
0
        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);
        }