Exemple #1
0
        /// <summary>
        /// Configures swagger Middleware.
        /// </summary>
        /// <param name="app">The application.</param>
        /// <param name="swaggerConfiguration">The swagger configuration.</param>
        /// <returns></returns>
        public static IApplicationBuilder ConfigureSwagger(this IApplicationBuilder app, SwaggerConfigurationModel swaggerConfiguration)
        {
            app.UseSwagger();

            app.UseSwaggerUI(c =>
            {
                foreach (var current in swaggerConfiguration.Versions)
                {
                    c.SwaggerEndpoint($"/swagger/v{current.Version}/swagger.json", current.Title);
                }
                c.RoutePrefix = "";
            });

            return(app);
        }
Exemple #2
0
        internal static IServiceCollection AddSwagger(this IServiceCollection services, SwaggerConfigurationModel swaggerConfiguration)
        {
            services.AddSwaggerGen(x =>
            {
                x.CustomSchemaIds(y => y.FullName);
                foreach (VersionConfigurationModel current in swaggerConfiguration.Versions)
                {
                    x.SwaggerDoc($"v{current.Version}", new OpenApiInfo
                    {
                        Version     = $"v{current.Version}",
                        Title       = current.Title,
                        Description = current.Description,
                        Contact     = new OpenApiContact
                        {
                            Email = current.Email
                        }
                    });
                }

                x.DocInclusionPredicate((version, apiDescriptor) =>
                {
                    if (!apiDescriptor.TryGetMethodInfo(out MethodInfo mi))
                    {
                        return(false);
                    }

                    if (!Regex.IsMatch(apiDescriptor.RelativePath, @"v{version}") &&
                        !Regex.IsMatch(apiDescriptor.RelativePath, @"v(\d+\.)?(\d+\.)?(\*|\d+)"))
                    {
                        return(false);
                    }

                    System.Collections.Generic.IEnumerable <ApiVersion> versions = mi.DeclaringType.GetCustomAttributes(true)
                                                                                   .OfType <ApiVersionAttribute>()
                                                                                   .SelectMany(attr => attr.Versions);

                    ApiVersion[] maps = mi.GetCustomAttributes()
                                        .OfType <MapToApiVersionAttribute>()
                                        .SelectMany(attr => attr.Versions).ToArray();

                    return(versions.Any(v => $"v{v.ToString()}" == version) &&
                           (maps.Length == 0 || maps.Any(v => $"v{v.ToString()}" == version)));
                });

                System.Collections.Generic.IEnumerable <string> documentations = swaggerConfiguration.XmlDocumentation ?? new[] { $"{Assembly.GetEntryAssembly().GetName().Name}.xml" };

                foreach (string documentationPath in documentations)
                {
                    string xmlPath = Path.Combine(AppContext.BaseDirectory, documentationPath);
                    x.IncludeXmlComments(xmlPath);
                }
            });

            return(services);
        }