Пример #1
0
        public static void SetupSwaggerDocs(
            this IServiceCollection services,
            DocsSettings docsSettings,
            ApiSettings apiSettings)
        {
            DocsSettings = docsSettings;

            if (DocsSettings?.Enabled == true)
            {
                DocsSettings.Version    = apiSettings.Version;
                DocsSettings.PathPrefix = apiSettings.PathPrefix;
                GenerateSwaggerUrl();

                services.AddSwaggerGen(options =>
                {
                    string readme = null;
                    if (string.IsNullOrWhiteSpace(DocsSettings.PathToReadme) == false)
                    {
                        readme = File.ReadAllText(DocsSettings.PathToReadme);
                    }

                    switch (apiSettings.JsonSerializer)
                    {
                    case JsonSerializerEnum.Camelcase:
                        options.SchemaFilter <CamelEnumSchemaFilter>();
                        break;

                    case JsonSerializerEnum.Snakecase:
                        options.SchemaFilter <SnakeEnumSchemaFilter>();
                        break;

                    case JsonSerializerEnum.Lowercase:
                        options.SchemaFilter <LowerEnumSchemaFilter>();
                        break;
                    }

                    options.OperationFilter <QueryAndPathCaseOperationFilter>();
                    options.DescribeAllEnumsAsStrings();
                    options.SwaggerDoc(apiSettings.Version, new Info
                    {
                        Title       = DocsSettings.Title,
                        Version     = apiSettings.Version,
                        Description = readme,
                        Contact     = new Contact
                        {
                            Name  = DocsSettings.AuthorName,
                            Email = DocsSettings.AuthorEmail
                        }
                    });
                });
            }
        }
        public static void SetupSwaggerDocs(
            this IServiceCollection services,
            DocsSettings docsSettings,
            ApiSettings apiSettings)
        {
            DocsSettings = docsSettings;

            if (DocsSettings?.Enabled == true)
            {
                DocsSettings.Version    = apiSettings.Version;
                DocsSettings.PathPrefix = apiSettings.PathPrefix;
                GenerateSwaggerUrl();

                services.AddSwaggerGen(options =>
                {
                    string readme = null;
                    try
                    {
                        if (string.IsNullOrWhiteSpace(DocsSettings.PathToReadme) == false)
                        {
                            readme = File.ReadAllText(DocsSettings.PathToReadme);
                        }
                    }
                    catch (Exception)
                    {
                        Console.WriteLine($"[ERROR] Swagger markdown ({DocsSettings.PathToReadme}) could not be loaded.");
                    }

                    switch (apiSettings.JsonSerializer)
                    {
                    case JsonSerializerEnum.Camelcase:
                        options.SchemaFilter <CamelEnumSchemaFilter>();
                        break;

                    case JsonSerializerEnum.Snakecase:
                        options.SchemaFilter <SnakeEnumSchemaFilter>();
                        break;

                    case JsonSerializerEnum.Lowercase:
                        options.SchemaFilter <LowerEnumSchemaFilter>();
                        break;
                    }

                    options.SchemaFilter <SnakeEnumSchemaFilter2>();

                    options.CustomSchemaIds(x => x.FullName);
                    options.CustomOperationIds(apiDesc =>
                    {
                        return(apiDesc.TryGetMethodInfo(out MethodInfo methodInfo)
                            ? methodInfo.Name : null);
                    });

                    options.OperationFilter <QueryAndPathCaseOperationFilter>();
                    options.SwaggerDoc(apiSettings.Version, new OpenApiInfo
                    {
                        Title       = DocsSettings.Title,
                        Version     = apiSettings.Version,
                        Description = readme,
                        Contact     = new OpenApiContact
                        {
                            Name  = DocsSettings.AuthorName,
                            Email = DocsSettings.AuthorEmail
                        }
                    });
                });
                services.AddSwaggerGenNewtonsoftSupport();
            }
        }