示例#1
0
        protected override void Initialize(HttpControllerContext controllerContext)
        {
            base.Initialize(controllerContext);

            if (DocumentationProvider != null)
            {
                return;
            }

            DocumentationProvider = Configuration.Services.GetDocumentationProviderEx();
        }
示例#2
0
 public void SetUp()
 {
     httpConfiguration = new HttpConfiguration(new HttpRouteCollection("/myApp"));
     httpConfiguration.Services.Replace(typeof(IDocumentationProvider), new WebApiHtmlDocumentationProvider(new HtmlDocumentation()));
     documentationProvider = httpConfiguration.Services.GetDocumentationProviderEx();
 }
示例#3
0
        /// <summary>
        /// Converts an <see cref="ApiParameterDescription"/> to one or more <see cref="SimpleApiParameterDescriptor"/>s.
        /// In simple cases, such as a string or primitive type parameter, a simple mapping will occur. When a parameter
        /// represents a complex type, one parameter will be returned for each public property on the type.
        /// </summary>
        public static IEnumerable <SimpleApiParameterDescriptor> Flatten(ApiDescription apiDescription, ApiParameterDescription parameterDescription, IDocumentationProviderEx documentationProvider)
        {
            var descriptor = parameterDescription.ParameterDescriptor;

            if (descriptor == null)
            {
                return(new[]
                {
                    new SimpleApiParameterDescriptor(parameterDescription.Name, typeof(string), apiDescription.RelativePath, parameterDescription.Source, parameterDescription.Documentation)
                });
            }

            bool isMany;
            var  parameterType = Unwrap(descriptor.ParameterType, out isMany);

            if (IsSimpleType(parameterType))
            {
                return(new[] { new SimpleApiParameterDescriptor(descriptor, apiDescription.RelativePath, isMany, parameterDescription.Documentation) });
            }

            if (UsesCustomModelBinder(descriptor))
            {
                var callingConvention = SimpleApiParameterDescriptor.GetCallingConvention(apiDescription.RelativePath, descriptor.ParameterName);

                return(new[]
                {
                    new SimpleApiParameterDescriptor(descriptor.ParameterName, parameterType, callingConvention, descriptor.DefaultValue, descriptor.IsOptional, isMany, parameterDescription.Documentation)
                });
            }

            return(EnumerateProperties(apiDescription, parameterType, documentationProvider));
        }
示例#4
0
        private static IEnumerable <SimpleApiParameterDescriptor> EnumerateProperties(ApiDescription apiDescription, IReflect type, IDocumentationProviderEx documentationProvider, string prefix = "", IList <SimpleApiParameterDescriptor> list = null, ISet <Type> visitedTypes = null)
        {
            if (list == null)
            {
                list = new List <SimpleApiParameterDescriptor>();
            }
            if (visitedTypes == null)
            {
                visitedTypes = new HashSet <Type>();
            }

            var props             = type.GetProperties(BindingFlags.Instance | BindingFlags.Public);
            var callingConvention = (apiDescription.HttpMethod == HttpMethod.Get || apiDescription.HttpMethod == HttpMethod.Head) ? "query-string" : "body";

            foreach (var p in props.Where(prop => prop.CanWrite))
            {
                bool isMany;
                var  parameterType = Unwrap(p.PropertyType, out isMany);

                if (IsSimpleType(parameterType) || UsesCustomModelBinder(p.PropertyType))
                {
                    list.Add(new SimpleApiParameterDescriptor(prefix + p.Name, parameterType, callingConvention, null, false, isMany, documentationProvider.GetDocumentation(p)));
                }
                else
                {
                    if (visitedTypes.Contains(p.PropertyType))
                    {
                        list.Add(new SimpleApiParameterDescriptor(prefix + p.Name, parameterType, callingConvention, null, false, isMany, documentationProvider.GetDocumentation(p)));
                    }
                    else
                    {
                        visitedTypes.Add(p.PropertyType);
                        EnumerateProperties(apiDescription, parameterType, documentationProvider, prefix + p.Name + ".", list, visitedTypes);
                    }
                }
            }

            return(list);
        }