private HttpContent ContentFor(HttpRequestMessage request, SwaggerDocument swaggerDoc) { var negotiator = request.GetConfiguration().Services.GetContentNegotiator(); var result = negotiator.Negotiate(typeof (SwaggerDocument), request, GetSupportedSwaggerFormatters()); return new ObjectContent(typeof (SwaggerDocument), swaggerDoc, result.Formatter, result.MediaType); }
public SwaggerDocument GetSwagger(string rootUrl, string apiVersion) { var schemaRegistry = new SchemaRegistry( _jsonSerializerSettings, _options.CustomSchemaMappings, _options.SchemaFilters, _options.ModelFilters, _options.IgnoreObsoleteProperties, _options.SchemaIdSelector, _options.DescribeAllEnumsAsStrings, _options.DescribeStringEnumsInCamelCase); Info info; _apiVersions.TryGetValue(apiVersion, out info); if (info == null) throw new UnknownApiVersion(apiVersion); var paths = GetApiDescriptionsFor(apiVersion) .Where(apiDesc => !(_options.IgnoreObsoleteActions && apiDesc.IsObsolete())) .OrderBy(_options.GroupingKeySelector, _options.GroupingKeyComparer) .GroupBy(apiDesc => apiDesc.RelativePathSansQueryString()) .ToDictionary(group => "/" + group.Key, group => CreatePathItem(group, schemaRegistry)); var rootUri = new Uri(rootUrl); var port = (!rootUri.IsDefaultPort) ? ":" + rootUri.Port : string.Empty; var swaggerDoc = new SwaggerDocument { info = info, host = rootUri.Host + port, basePath = (rootUri.AbsolutePath != "/") ? rootUri.AbsolutePath : null, schemes = (_options.Schemes != null) ? _options.Schemes.ToList() : new[] { rootUri.Scheme }.ToList(), paths = paths, definitions = schemaRegistry.Definitions, securityDefinitions = _options.SecurityDefinitions }; foreach(var filter in _options.DocumentFilters) { filter.Apply(swaggerDoc, schemaRegistry, _apiExplorer); } return swaggerDoc; }