void PopulateActionDescriptions(
            HttpActionDescriptor actionDescriptor,
            IHttpRoute route,
            ODataRouteBuilderContext routeBuilderContext,
            string relativePath,
            Collection <VersionedApiDescription> apiDescriptions,
            ApiVersion apiVersion)
        {
            Contract.Requires(actionDescriptor != null);
            Contract.Requires(route != null);
            Contract.Requires(relativePath != null);
            Contract.Requires(apiDescriptions != null);
            Contract.Requires(apiVersion != null);

            var documentation       = DocumentationProvider?.GetDocumentation(actionDescriptor);
            var responseDescription = CreateResponseDescriptionWithRoute(actionDescriptor, route);
            var responseType        = responseDescription.ResponseType ?? responseDescription.DeclaredType;
            var requestFormatters   = new List <MediaTypeFormatter>();
            var responseFormatters  = new List <MediaTypeFormatter>();
            var supportedMethods    = GetHttpMethodsSupportedByAction(route, actionDescriptor);
            var model      = actionDescriptor.GetApiVersionModel();
            var deprecated = !model.IsApiVersionNeutral && model.DeprecatedApiVersions.Contains(apiVersion);

            PopulateMediaTypeFormatters(actionDescriptor, routeBuilderContext.ParameterDescriptions, route, responseType, requestFormatters, responseFormatters);

            foreach (var method in supportedMethods)
            {
                var apiDescription = new VersionedApiDescription()
                {
                    Documentation       = documentation,
                    HttpMethod          = method,
                    RelativePath        = relativePath,
                    ActionDescriptor    = actionDescriptor,
                    Route               = route,
                    ResponseDescription = responseDescription,
                    ApiVersion          = apiVersion,
                    IsDeprecated        = deprecated,
                    Properties          = { [typeof(IEdmModel)] = routeBuilderContext.EdmModel },
                };

                if (routeBuilderContext.EntitySet != null)
                {
                    apiDescription.Properties[typeof(IEdmEntitySet)] = routeBuilderContext.EntitySet;
                }

                if (routeBuilderContext.Operation != null)
                {
                    apiDescription.Properties[typeof(IEdmOperation)] = routeBuilderContext.Operation;
                }

                apiDescription.ParameterDescriptions.AddRange(routeBuilderContext.ParameterDescriptions);
                apiDescription.SupportedRequestBodyFormatters.AddRange(requestFormatters);
                apiDescription.SupportedResponseFormatters.AddRange(responseFormatters);
                PopulateApiVersionParameters(apiDescription, apiVersion);
                apiDescriptions.Add(apiDescription);
            }
        }
        /// <summary>
        /// Probably the document you are reading now.
        /// </summary>
        public override SimpleApiDocumentation GetApiDocumentation()
        {
            var docs = base.GetApiDocumentation();

            docs.Add("Packages", new SimpleApiDescription(Request, "OData", NuGetWebApiRouteMapper.ODataRoutePath)
            {
                Documentation = DocumentationProvider.GetDocumentation(typeof(PackagesODataController))
            });

            docs.Add("Indexing", new SimpleApiDescription(Request, "Hub", NuGetWebApiRouteMapper.SignalrRoutePath)
            {
                Documentation = DocumentationProvider.GetDocumentation(typeof(StatusHub))
            });


            return(docs);
        }
Beispiel #3
0
        void PopulateActionDescriptions(HttpActionDescriptor actionDescriptor, IHttpRoute route, string localPath, Collection <VersionedApiDescription> apiDescriptions, ApiVersion apiVersion)
        {
            var parameterDescriptions = CreateParameterDescriptions(actionDescriptor, route);
            var context = new ODataRouteBuilderContext(Configuration, localPath, (ODataRoute)route, actionDescriptor, parameterDescriptions);

            if (context.EdmModel.EntityContainer == null)
            {
                return;
            }

            var relativePath        = new ODataRouteBuilder(context).Build();
            var documentation       = DocumentationProvider?.GetDocumentation(actionDescriptor);
            var responseDescription = CreateResponseDescription(actionDescriptor);
            var responseType        = responseDescription.ResponseType ?? responseDescription.DeclaredType;
            var requestFormatters   = new List <MediaTypeFormatter>();
            var responseFormatters  = new List <MediaTypeFormatter>();
            var supportedMethods    = GetHttpMethodsSupportedByAction(route, actionDescriptor);
            var deprecated          = actionDescriptor.ControllerDescriptor.GetApiVersionModel().DeprecatedApiVersions.Contains(apiVersion);

            PopulateMediaTypeFormatters(actionDescriptor, parameterDescriptions, route, responseType, requestFormatters, responseFormatters);

            foreach (var method in supportedMethods)
            {
                var apiDescription = new VersionedApiDescription()
                {
                    Documentation       = documentation,
                    HttpMethod          = method,
                    RelativePath        = relativePath,
                    ActionDescriptor    = actionDescriptor,
                    Route               = route,
                    ResponseDescription = responseDescription,
                    ApiVersion          = apiVersion,
                    IsDeprecated        = deprecated,
                    Properties          =
                    {
                        [typeof(IEdmModel)] = context.EdmModel
                    }
                };

                apiDescription.ParameterDescriptions.AddRange(parameterDescriptions);
                apiDescription.SupportedRequestBodyFormatters.AddRange(requestFormatters);
                apiDescription.SupportedResponseFormatters.AddRange(responseFormatters);
                PopulateApiVersionParameters(apiDescription, apiVersion);
                apiDescriptions.Add(apiDescription);
            }
        }