Esempio n. 1
0
        public FileResult ExportApiWord(string type, string version)
        {
            string memi      = string.Empty;
            string fileExten = string.Empty;
            Stream outdata   = null;
            //获取swagger json 之前通过swagger的接口获取,废弃了。原因:他返回的数据看着像json数据,实则不是,不能用newtonsoft反序列化成对象。
            //var url = $"{HttpContext.Request.Scheme}://{HttpContext.Request.Host}/swagger/v2/swagger.json";
            //var data = RestSharpHelper.HttpGet(url);
            //var model = JsonHelper.StrToModel<OpenApiDocument>(data);

            //1.获取api文档json,version是版本,根据指定版本获取指定版本的json对象。
            var model = _swaggerGenerator.GetSwagger(version);

            if (model == null)
            {
                throw new Exception("Swagger Json cannot be equal to null!");
            }
            //2.这里使用了微软的mvc模板引擎技术来生成html,做过mvc项目的同学应该都知道是啥东西,这里不细说了。自己看代码吧,用起来很方便。
            var html = T4Helper.GeneritorSwaggerHtml($"{_hostingEnvironment.WebRootPath}\\SwaggerDoc.cshtml", model);
            //3.将html转换成需要导出的文件类型。
            var op = _spireDocHelper.SwaggerHtmlConvers(html, type, out memi);

            if (!op.Successed)
            {
                throw new Exception(op.Message);
            }
            outdata = op.Data;
            return(File(outdata, memi, $"Titan.Blog.WebAPP API文档 {version}{type}"));//返回文件流,type是文件格式
        }
        public static void Init(TestContext testContext)
        {
            var options = new SwaggerGeneratorSettings();

            options.DocInclusionPredicate = (version, api) => true;
            options.OperationFilters.Add(new RemoveReadOnlyFromUriParametersOperationFilter());
            options.OperationFilters.Add(new RemoveBindNoneFromUriParametersOperationFilter());
            options.OperationFilters.Add(new AddAsObjectAnnotationOperationFilter());
            options.OperationFilters.Add(new HandleGridViewDataSetReturnType());
            options.SwaggerDocs.Add("v1", new Info()
            {
                Title = "Test API", Version = "v1"
            });

            var serviceCollection = new ServiceCollection()
                                    .AddSingleton <ObjectPoolProvider, DefaultObjectPoolProvider>()
                                    .AddSingleton <IHostingEnvironment, HostingEnvironment>()
                                    .AddLogging();

            serviceCollection.AddMvc(setup => {
                setup.Conventions.Add(new ApiExplorerVisibilityEnabledConvention());
            })
            .AddApplicationPart(typeof(CompaniesController).Assembly);

            var serviceProvider = serviceCollection.BuildServiceProvider();

            var apiDescriptionGroupCollectionProvider = serviceProvider.GetService <IApiDescriptionGroupCollectionProvider>();

            var schemaRegistryFactory = new SchemaRegistryFactory(new JsonSerializerSettings(), new SchemaRegistrySettings());
            var generator             = new SwaggerGenerator(apiDescriptionGroupCollectionProvider, schemaRegistryFactory, options);

            document = generator.GetSwagger("v1");
        }
        public static void Init(TestContext testContext)
        {
            var t = typeof(CompaniesController);

            var config = new HttpConfiguration();

            config.MapHttpAttributeRoutes();
            config.EnsureInitialized();

            var apiExplorer = new ApiExplorer(config);
            var settings    = new JsonSerializerSettings();
            var versions    = new Dictionary <string, Info> {
                { "v1", new Info()
                  {
                      version = "v1", title = "Test API"
                  } }
            };
            var options = new SwaggerGeneratorOptions(operationFilters: new IOperationFilter[]
            {
                // default filters used by Swashbuckle
                new HandleFromUriParams(),
                new ApplySwaggerOperationAttributes(),
                new ApplySwaggerResponseAttributes(),
                new ApplySwaggerOperationFilterAttributes(),

                // our custom filters
                new AddAsObjectAnnotationOperationFilter(),
                new HandleGridViewDataSetReturnType()
            });
            var generator = new SwaggerGenerator(apiExplorer, settings, versions, options);

            document = generator.GetSwagger("http://localhost:61453/", "v1");
        }
Esempio n. 4
0
        public IActionResult GetSwDocByPath()
        {
            var document = SwaggerGenerator.GetSwagger("v1");
            var stream   = GeneratorWordDoc.Generator(document, out var memi, "Templates\\SwaggerDoc.cshtml");

            return(File(stream, memi, "api简化文档.doc"));
        }
Esempio n. 5
0
        public IActionResult GetSwDoc()
        {
            var document = SwaggerGenerator.GetSwagger("v1");
            var stream   = GeneratorWordDoc.Generator(document, out var memi);

            return(File(stream, memi, "api简化文档.doc"));
        }
Esempio n. 6
0
        /// <inheritdoc/>
        public OpenApiDocument GetSwagger(string documentName, string host = null, string basePath = null)
        {
            foreach (var handler in _handlers)
            {
                if ($"Dolittle.{handler.Name}".Equals(documentName, StringComparison.InvariantCultureIgnoreCase))
                {
                    var document = _documentGenerator.GenerateFor(handler);

                    var path       = basePath == null ? PathString.Empty : (PathString)basePath;
                    var serverPath = path.Add(_options.Value.BasePath).Add($"/{handler.Name}");

                    document.Servers = new[]
                    {
                        new OpenApiServer
                        {
                            Url = $"{host}{serverPath}"
                        }
                    };

                    foreach (var modifier in _modifiers)
                    {
                        modifier.ModifyDocument(handler, document);
                    }

                    return(document);
                }
            }

            return(_swaggerGenerator.GetSwagger(documentName, host, basePath));
        }
Esempio n. 7
0
        public static void Init(TestContext testContext)
        {
            var knownTypesOptions = Options.Create(new DotvvmApiOptions());

            knownTypesOptions.Value.AddKnownType(typeof(Company <string>));

            var options = new SwaggerGeneratorOptions
            {
                DocInclusionPredicate = (version, api) => true,
                OperationFilters      =
                {
                    new RemoveReadOnlyFromUriParametersOperationFilter(),
                    new RemoveBindNoneFromUriParametersOperationFilter(),
                    new AddAsObjectOperationFilter(knownTypesOptions)
                },
                DocumentFilters =
                {
                    new HandleKnownTypesDocumentFilter(knownTypesOptions)
                },
                SwaggerDocs =
                {
                    { "v1", new Info()
                        {
                            Title = "Test API", Version = "v1"
                        } }
                }
            };

            var serviceCollection = new ServiceCollection()
                                    .AddSingleton <ObjectPoolProvider, DefaultObjectPoolProvider>()
                                    .AddSingleton <IHostingEnvironment, HostingEnvironment>()
                                    .AddSingleton <DiagnosticSource>(p => new DiagnosticListener("test"))
                                    .AddLogging();

            serviceCollection.AddMvc(setup => setup.Conventions.Add(new ApiExplorerVisibilityEnabledConvention()))
            .AddApplicationPart(typeof(CompaniesController).Assembly);

            var serviceProvider = serviceCollection.BuildServiceProvider();
            var apiDescriptionGroupCollectionProvider = serviceProvider.GetRequiredService <IApiDescriptionGroupCollectionProvider>();

            var schemaSettings = new SchemaRegistryOptions()
            {
                SchemaFilters =
                {
                    new AddTypeToModelSchemaFilter()
                }
            };

            var schemaRegistryFactory = new SchemaRegistryFactory(new JsonSerializerSettings(), schemaSettings);
            var generator             = new SwaggerGenerator(apiDescriptionGroupCollectionProvider, schemaRegistryFactory, options);

            document = generator.GetSwagger("v1");
        }
Esempio n. 8
0
        public FileResult ExportWord(string type, string version)
        {
            string contenttype = string.Empty;

            var model = _swaggerGenerator.GetSwagger(version);                                                          //1. 根据指定版本获取指定版本的json对象。

            var html = HtmlHelper.GeneritorSwaggerHtml($"{_webHostEnvironment.WebRootPath}\\SwaggerDoc.cshtml", model); //2. 根据模板引擎生成html

            var op = _spireDocHelper.SwaggerConversHtml(html, type, out contenttype);                                   //3.将html导出文件类型

            return(File(op, contenttype, $"XUnit.Core接口文档{type}"));
        }
        public void GetSwagger_SupportsOption_SchemaFilters()
        {
            var subject = new SwaggerGenerator(
                new SwaggerGeneratorOptions
            {
                SwaggerDocs = new Dictionary <string, OpenApiInfo>
                {
                    ["v1"] = new OpenApiInfo {
                        Version = "V1", Title = "Test API"
                    }
                }
            },
                new FakeApiDescriptionGroupCollectionProvider(new[]
            {
                ApiDescriptionFactory.Create <FakeController>(
                    c =>
                    nameof(c.ActionWithObjectParameter),
                    groupName: "v1",
                    httpMethod: "POST",
                    relativePath: "resource",
                    parameterDescriptions: new []
                {
                    new ApiParameterDescription
                    {
                        Name   = "param",
                        Source = BindingSource.Body
                    }
                })
            }),
                new SchemaGenerator(new SchemaGeneratorOptions
            {
                SchemaFilters = new List <ISchemaFilter>
                {
                    new VendorExtensionsSchemaFilter()
                }
            }, new SystemTextJsonBehavior(new JsonSerializerOptions()))
                );

            var document = subject.GetSwagger("v1");

            Assert.Equal(2, document.Components.Schemas["XmlAnnotatedType"].Extensions.Count);
            Assert.Equal("bar", ((OpenApiString)document.Components.Schemas["XmlAnnotatedType"].Extensions["X-foo"]).Value);
            Assert.Equal("v1", ((OpenApiString)document.Components.Schemas["XmlAnnotatedType"].Extensions["X-docName"]).Value);
        }
Esempio n. 10
0
        /// <summary>
        ///  Generate swagger doc
        /// </summary>
        /// <param name="httpConfig"></param>
        public static void SaveSwaggerJsonDoc(this HttpConfiguration httpConfig)
        {
            var baseAddress = $"{Properties.Settings.Default.ServiceUrl}:{Properties.Settings.Default.ServicePort}/";

            // 1) Apply your WebApi config.
            //WebApiConfig.Register(httpConfig);
            httpConfig.EnsureInitialized();

            // 2) Generate in-memory swagger doc
            var swaggerProvider = new SwaggerGenerator(
                httpConfig.Services.GetApiExplorer(),
                httpConfig.Formatters.JsonFormatter.SerializerSettings,
                new Dictionary <string, Info> {
                { "v1", new Info {
                      version = "v1", title = "Push Notify"
                  } }
            },
                new SwaggerGeneratorOptions(
                    // apply your swagger options here ...
                    schemaIdSelector: (type) => type.FriendlyId(true),
                    conflictingActionsResolver: (apiDescriptions) => apiDescriptions.First()
                    )
                );
            var swaggerDoc = swaggerProvider.GetSwagger(baseAddress, "v1");

            // 3) Serialize
            var swaggerString = JsonConvert.SerializeObject(
                swaggerDoc,
                Formatting.Indented,
                new JsonSerializerSettings
            {
                NullValueHandling = NullValueHandling.Ignore,
                Converters        = new[] { new VendorExtensionsConverter() }
            }
                );

            if (!File.Exists(GetPath()))
            {
                File.Delete(GetPath());
            }

            File.WriteAllText(GetPath(), swaggerString);
        }
Esempio n. 11
0
 public OpenApiDocument GetSwagger(string documentName, string host = null, string basePath = null)
 {
     // Just catch document name
     _documentName = documentName;
     return(_swaggerGenerator.GetSwagger(documentName, host, basePath));
 }
Esempio n. 12
0
        public static void Init(TestContext testContext)
        {
            var knownTypesOptions = Options.Create(new DotvvmApiOptions());

            knownTypesOptions.Value.AddKnownType(typeof(Company <string>));

            var options = new SwaggerGeneratorOptions
            {
                DocInclusionPredicate = (version, api) => true,
                OperationFilters      =
                {
                    new RemoveReadOnlyFromUriParametersOperationFilter(),
                    new RemoveBindNoneFromUriParametersOperationFilter(),
                    new AddAsObjectOperationFilter(knownTypesOptions)
                },
                DocumentFilters =
                {
                    new HandleKnownTypesDocumentFilter(knownTypesOptions)
                },
                SwaggerDocs =
                {
                    { "v1", new OpenApiInfo()
                        {
                            Title = "Test API", Version = "v1"
                        } }
                }
            };

            var serviceCollection = new ServiceCollection()
                                    .AddSingleton <ObjectPoolProvider, DefaultObjectPoolProvider>()
                                    .AddSingleton <DiagnosticSource>(p => new DiagnosticListener("test"))
                                    .AddLogging();

            serviceCollection.AddMvc(setup => setup.Conventions.Add(new ApiExplorerVisibilityEnabledConvention()))
            .AddApplicationPart(typeof(CompaniesController).Assembly);

            var serviceProvider = serviceCollection.BuildServiceProvider();
            var apiDescriptionGroupCollectionProvider = serviceProvider.GetRequiredService <IApiDescriptionGroupCollectionProvider>();

            string GetCustomSchemaId(Type modelType)
            {
                if (!modelType.IsConstructedGenericType)
                {
                    return(modelType.Name.Replace("[]", "Array"));
                }

                var generics = modelType.GetGenericArguments()
                               .Select(genericArg => GetCustomSchemaId(genericArg))
                               .Aggregate((previous, current) => previous + current);

                return($"{modelType.Name.Split('`').First()}[{generics}]");
            }

            var schemaGeneratorOptions = new SchemaGeneratorOptions()
            {
                SchemaFilters =
                {
                    new AddTypeToModelSchemaFilter()
                },
                SchemaIdSelector = type => GetCustomSchemaId(type)
            };

            var schemaGenerator  = new SchemaGenerator(schemaGeneratorOptions, new JsonSerializerDataContractResolver(new JsonSerializerOptions()));
            var swaggerGenerator = new SwaggerGenerator(options, apiDescriptionGroupCollectionProvider, schemaGenerator);

            document = swaggerGenerator.GetSwagger("v1");
        }
Esempio n. 13
0
 /// <summary>
 /// 获取Swagger文档
 /// </summary>
 /// <param name="documentName">文档名称</param>
 /// <param name="host">主机</param>
 /// <param name="basePath">基础路径</param>
 public OpenApiDocument GetSwagger(string documentName, string host, string basePath) =>
 Cache.GetOrAdd($"{documentName}_{host}_{basePath}",
                (_) => _swaggerGenerator.GetSwagger(documentName, host, basePath));
Esempio n. 14
0
        /// <summary>
        /// 生成MarkDown
        /// </summary>
        /// <returns></returns>
        public string GetSwaggerDoc(string name)
        {
            if (string.IsNullOrEmpty(name))
            {
                throw new Exception("name is null !");
            }
            var document = _generator.GetSwagger(name);

            if (document == null)
            {
                throw new Exception("document is null !");
            }
            Schemas = document.Components.Schemas;
            var markDown = new StringBuilder();

            markDown.AppendLine(document?.Info?.Title.H());         //文档标题
            markDown.AppendLine(document?.Info?.Description.Ref()); //文档描述
            foreach (var path in document.Paths)
            {
                foreach (var operationItem in path.Value.Operations)
                {
                    var operation = operationItem.Value;
                    var method    = operationItem.Key.ToString();
                    var row       = new StringBuilder();
                    var url       = path.Key;
                    var title     = operation.Summary ?? url;
                    var query     = GetParameters(operation.Parameters);
                    var(requestExapmle, requestSchema)   = GetRequestBody(operation.RequestBody);
                    var(responseExapmle, responseSchema) = GetResponses(operation.Responses);
                    row.AppendLine(title.H(2));            //接口名称
                    row.AppendLine("基本信息".H(3).NewLine()); //基本信息
                    row.AppendLine($"{"接口地址:".B()}{url}".Li().NewLine());
                    row.AppendLine($"{"请求方式:".B()}{method}".Li().NewLine());
                    if (method == "Post" || method == "Put")
                    {
                        row.AppendLine($"{"请求类型:".B()}{contentType}".Li().NewLine());
                    }
                    if (string.IsNullOrWhiteSpace(query) == false)//Query
                    {
                        row.AppendLine("Parameters".H(3));
                        row.AppendLine(query);
                    }
                    if (string.IsNullOrWhiteSpace(requestSchema) == false)//RequestSchema
                    {
                        row.AppendLine("Request Schema".H(3));
                        row.AppendLine(requestSchema.Code());
                    }
                    if (string.IsNullOrWhiteSpace(requestExapmle) == false)//RequestBody
                    {
                        row.AppendLine("RequestBody Example".H(3));
                        row.AppendLine(requestExapmle.Code());
                    }
                    if (string.IsNullOrWhiteSpace(responseSchema) == false)//ResponseSchema
                    {
                        row.AppendLine("Response Schema".H(3));
                        row.AppendLine(responseSchema.Code());
                    }
                    if (string.IsNullOrWhiteSpace(responseExapmle) == false)//ResponseBody
                    {
                        row.AppendLine("ResponseBody Example".H(3));
                        row.AppendLine(responseExapmle.Code());
                    }
                    if (string.IsNullOrWhiteSpace(row.ToString()) == false)
                    {
                        markDown.AppendLine(row.ToString().Br());
                    }
                }
            }
            return(markDown.ToString());
        }
 public OpenApiDocument GetSwagger(string documentName, string host = null, string basePath = null)
 {
     return(SwaggerCache.Get(documentName, (_) => _swaggerGenerator.GetSwagger(documentName, host, basePath)));
 }