/// <summary>
        /// Creates a new <see cref="IActionMethodDefinition"/> in the context of <paramref name="controllerDefinition"/>
        /// for <paramref name="method"/>.
        /// </summary>
        /// <param name="controllerDefinition">The controller definition in which the method is found.</param>
        /// <param name="method">The method for which to create a definition.</param>
        /// <returns>A new <see cref="IActionMethodDefinition"/> instance.</returns>
        public IActionMethodDefinition Create(IControllerDefinition controllerDefinition, MethodInfo method)
        {
            if (controllerDefinition == null)
            {
                throw new ArgumentNullException("controllerDefinition");
            }
            if (method == null)
            {
                throw new ArgumentNullException("method");
            }

            var definition = new ActionMethodDefinition();

            definition.Name = method.GetProxyName();
            definition.Type = GetMethodType(method);
            definition.Url  = GetUrl(controllerDefinition, GetExplicitActionName(method) ?? method.Name.ToLower());

            var index      = 0;
            var parameters = method.GetParameters();

            foreach (var param in parameters)
            {
                var record = new ParameterDefinition {
                    Index = index,
                    Name  = param.Name,
                    Type  = param.ParameterType
                };
                if (param.HasAttribute <FromUriAttribute>())
                {
                    definition.UrlParameters.Add(record);
                }
                else if (param.HasAttribute <FromBodyAttribute>())
                {
                    definition.BodyParameter = record;
                }
                else if (definition.Type == HttpVerbs.Get)
                {
                    definition.UrlParameters.Add(record);
                }
                else if (definition.Type == HttpVerbs.Post && parameters.Length == 1)
                {
                    definition.BodyParameter = record;
                }
                else
                {
                    definition.UrlParameters.Add(record);
                }

                index++;
            }

            return(definition);
        }
        private ActionMethodDefinition CreateActionMethodDefinition(ApiDescription apiDescription)
        {
            //var groupName = _options.GroupNameSelector(apiDescription);

            var parameters = apiDescription.ParameterDescriptions
                             .Where(paramDesc => paramDesc.Source.IsFromRequest)
                             .Select(paramDesc => CreateParameterDefinition(paramDesc))
                             .ToList();

            //var responses = apiDescription.SupportedResponseTypes
            //    .DefaultIfEmpty(new ApiResponseType { StatusCode = 200 })
            //    .ToDictionary(
            //        apiResponseType => apiResponseType.StatusCode.ToString(),
            //        apiResponseType => CreateResponse(apiResponseType)
            //     );
            var action = ((Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor)apiDescription.ActionDescriptor);
            var actionMethodDefinition = new ActionMethodDefinition
            {
                Name          = action.ActionName,
                BodyParameter = parameters.SingleOrDefault(_ => _.Source == "body"),
                //Tags = (groupName != null) ? new[] { groupName } : null,
                Description = apiDescription.ActionDescriptor.DisplayName,
                //OperationId = apiDescription.FriendlyId(),
                //Consumes = apiDescription.SupportedRequestMediaTypes().ToList(),
                ReturnType    = apiDescription.SupportedResponseTypes.FirstOrDefault()?.Type.ToString(),
                Url           = apiDescription.RelativePath,
                UrlParameters = parameters.Any() ? parameters : new List <ParameterDefinition>(),
                Type          = action.MethodInfo.DeclaringType.ToString()
                                //    Produces = apiDescription.SupportedResponseMediaTypes().ToList(),
                                // Parameters = parameters.Any() ? parameters : null, // parameters can be null but not empty
                                // Responses = responses,
                                //  Deprecated = apiDescription.IsObsolete()
            };

            //var filterContext = new OperationFilterContext(apiDescription, schemaRegistry);
            //foreach (var filter in _options.OperationFilters)
            //{
            //    filter.Apply(actionMethodDefinition, filterContext);
            //}

            return(actionMethodDefinition);
        }