public static WebApiDocumentation GetWebApiDocumentation(this HttpConfiguration config)
        {
            var                           documatation                   = new WebApiDocumentation();
            IApiExplorer                  apiExplorer                    = config.Services.GetApiExplorer();
            var                           documentationProvider          = config.Services.GetDocumentationProvider();
            HttpControllerDescriptor      previousControllerDescriptor   = null;
            WebApiControllerDocumentation currentControllerDocumentation = null;

            foreach (ApiDescription api in apiExplorer.ApiDescriptions)
            {
                if (previousControllerDescriptor == null || !previousControllerDescriptor.Equals(api.ActionDescriptor.ControllerDescriptor))
                {
                    previousControllerDescriptor = api.ActionDescriptor.ControllerDescriptor;
                    var controllerDescription = documentationProvider.GetDocumentation(previousControllerDescriptor);

                    currentControllerDocumentation = new WebApiControllerDocumentation
                    {
                        Name        = previousControllerDescriptor.ControllerName,
                        Description = controllerDescription
                    };

                    documatation.Controllers.Add(currentControllerDocumentation);
                }
                var description = documentationProvider.GetDocumentation(api.ActionDescriptor);
                var returns     = documentationProvider.GetResponseDocumentation(api.ActionDescriptor);

                var actionDocumentation = new WebApiControllerActionDocumentation();
                actionDocumentation.HttpMethod          = api.HttpMethod.ToString();
                actionDocumentation.RelativePath        = api.RelativePath;
                actionDocumentation.Description         = description;
                actionDocumentation.ResponseDescription = returns;
                actionDocumentation.ResponseType        = api.ResponseDescription.DeclaredType;

                foreach (ApiParameterDescription parameter in api.ParameterDescriptions)
                {
                    var parameterDescription = documentationProvider.GetDocumentation(parameter.ParameterDescriptor);

                    var parameterDocumentation = new WebApiControllerActionParameterDocumentation();
                    parameterDocumentation.Name        = parameter.Name;
                    parameterDocumentation.Description = parameterDescription;
                    parameterDocumentation.Type        = parameter.ParameterDescriptor.ParameterType;
                    parameterDocumentation.Source      = parameter.Source.ToString();

                    actionDocumentation.Parameters.Add(parameterDocumentation);
                }
                currentControllerDocumentation.Actions.Add(actionDocumentation);
            }
            return(documatation);
        }