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); }
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); } }