private IEnumerable<HttpActionRequestParameterDocumentation> CreateHttpActionRequestParameters(HttpActionDescriptor httpActionDescriptor, HttpActionDocumentationMetadata actionDocumentationMetadata)
 {
     return
         from parameterDescriptor in httpActionDescriptor.GetParameters()
         where parameterDescriptor.ParameterBinderAttribute is FromUriAttribute || TypeHelper.CanConvertFromString(parameterDescriptor.ParameterType)
         let parameterDescription =
             actionDocumentationMetadata.HttpActionParameters
                                        .Any(parameterDocumentation =>
                                             parameterDocumentation.Name.Equals(parameterDescriptor.ParameterName) &&
                                             parameterDocumentation.Type.Equals(parameterDescriptor.ParameterType))
                 ? actionDocumentationMetadata.HttpActionParameters
                                              .Single(parameterDocumentation =>
                                                      parameterDocumentation.Name.Equals(parameterDescriptor.ParameterName) &&
                                                      parameterDocumentation.Type.Equals(parameterDescriptor.ParameterType)).Description
                 : String.Empty
         select new HttpActionRequestParameterDocumentation(
             parameterDescriptor.ParameterName,
             GetProperyTypeName(parameterDescriptor.ParameterType),
             parameterDescription,
             !parameterDescriptor.IsOptional);
 }
        private HttpActionResponseDocumentation CreateHttpActionResponseDocumentation(HttpActionDocumentationMetadata actionDocumentationMetadata)
        {
            if (actionDocumentationMetadata.HttpActionResponseDocumentationMetadata == null)
            {
                return null;
            }

            // Set the response status code.
            HttpStatusCode statusCode = actionDocumentationMetadata.HttpActionResponseDocumentationMetadata.StatusCode;

            // Set the summary which describes the data returned by the HTTP action.
            String responseSummary = actionDocumentationMetadata.HttpActionResponseDocumentationMetadata.Summary;

            IEnumerable<PropertyDocumentation> documentedProperties = null;
            Object responseExample = null;
            Type responseType = GetResponseType(actionDocumentationMetadata.HttpActionResponseDocumentationMetadata.Type);
            if (responseType != null && _WebApiDocumentationMetadata.DtoDocumentation.ContainsKey(responseType))
            {
                DtoDocumentationMetadata dtoDocumentationMetadata = _WebApiDocumentationMetadata.DtoDocumentation[responseType];

                // Set the summary which describes the data returned by the HTTP action.
                responseSummary = responseSummary ?? dtoDocumentationMetadata.Summary;

                // Generate documentation for the response object's properties.
                documentedProperties = CreatePropertyDocumentation(dtoDocumentationMetadata, String.Empty);

                // Create an example response object.
                responseExample = actionDocumentationMetadata.HttpActionResponseDocumentationMetadata.Type.GetInterface("IEnumerable") != null ||
                   actionDocumentationMetadata.HttpActionResponseDocumentationMetadata.Type.IsArray
                       ? new[] { CreateResponseContentExample(dtoDocumentationMetadata) }
                       : CreateResponseContentExample(dtoDocumentationMetadata);
            }

            return new HttpActionResponseDocumentation(
                responseSummary,
                statusCode,
                documentedProperties ?? Enumerable.Empty<PropertyDocumentation>(),
                responseExample);
        }
        private HttpActionRequestDocumentation CreateHttpActionRequestDocumentation(HttpActionDescriptor httpActionDescriptor, HttpActionDocumentationMetadata actionDocumentationMetadata)
        {
            var requestParameters = CreateHttpActionRequestParameters(httpActionDescriptor, actionDocumentationMetadata);
            var requestContent = CreateHttpActionRequestBody(httpActionDescriptor);

            return new HttpActionRequestDocumentation(requestParameters, requestContent);
        }