1
+ using System . Collections . Generic ;
2
+ using System . Linq ;
3
+ using ArchitectNow . Web . Models ;
4
+ using Microsoft . AspNetCore . Builder . Internal ;
5
+ using NJsonSchema ;
6
+ using NSwag . AspNetCore ;
7
+ using NSwag . SwaggerGeneration . WebApi ;
8
+
9
+ namespace ArchitectNow . Web . Configuration
10
+ {
11
+ public static class SwaggerExtensions
12
+ {
13
+ public static void ConfigureSwaggerUi3 ( this ApplicationBuilder builder ,
14
+ IEnumerable < SwaggerOptions < SwaggerUi3Settings < WebApiToSwaggerGeneratorSettings > > > options )
15
+ {
16
+ foreach ( var option in options )
17
+ {
18
+ if ( option . Controllers ? . Any ( ) == true )
19
+ {
20
+ builder . UseSwaggerUi3 ( option . Controllers , settings => { ConfigureSettings ( settings , option ) ; } ) ;
21
+ }
22
+ else
23
+ {
24
+ builder . UseSwaggerUi3 ( option . ControllerAssembly , settings => { ConfigureSettings ( settings , option ) ; } ) ;
25
+ }
26
+ }
27
+ }
28
+
29
+ public static void ConfigureSwaggerUi ( this ApplicationBuilder builder ,
30
+ IEnumerable < SwaggerOptions < SwaggerUiSettings < WebApiToSwaggerGeneratorSettings > > > options )
31
+ {
32
+ foreach ( var option in options )
33
+ {
34
+ if ( option . Controllers ? . Any ( ) == true )
35
+ {
36
+ builder . UseSwaggerUi ( option . Controllers , settings => { ConfigureSettings ( settings , option ) ; } ) ;
37
+ }
38
+ else
39
+ {
40
+ builder . UseSwaggerUi ( option . ControllerAssembly , settings => { ConfigureSettings ( settings , option ) ; } ) ;
41
+ }
42
+ }
43
+ }
44
+
45
+ public static void ConfigureSwaggerReDoc ( this ApplicationBuilder builder ,
46
+ IEnumerable < SwaggerOptions < SwaggerReDocSettings < WebApiToSwaggerGeneratorSettings > > > options )
47
+ {
48
+ foreach ( var option in options )
49
+ {
50
+ if ( option . Controllers ? . Any ( ) == true )
51
+ {
52
+ builder . UseSwaggerReDoc ( option . Controllers , settings => { ConfigureSettings ( settings , option ) ; } ) ;
53
+ }
54
+ else
55
+ {
56
+ builder . UseSwaggerReDoc ( option . ControllerAssembly , settings => { ConfigureSettings ( settings , option ) ; } ) ;
57
+ }
58
+ }
59
+ }
60
+
61
+ private static void ConfigureSettings < T > ( T settings , SwaggerOptions < T > option ) where T : SwaggerUiSettingsBase < WebApiToSwaggerGeneratorSettings >
62
+ {
63
+ settings . SwaggerRoute = option . SwaggerRoute ;
64
+ settings . SwaggerUiRoute = option . SwaggerUiRoute ;
65
+ settings . GeneratorSettings . DefaultPropertyNameHandling = PropertyNameHandling . CamelCase ;
66
+ settings . GeneratorSettings . Title = option . Title ;
67
+ settings . GeneratorSettings . FlattenInheritanceHierarchy = true ;
68
+ settings . GeneratorSettings . IsAspNetCore = true ;
69
+
70
+ foreach ( var optionDocumentProcessor in option . DocumentProcessors )
71
+ {
72
+ settings . GeneratorSettings . DocumentProcessors . Add ( optionDocumentProcessor ) ;
73
+ }
74
+
75
+ foreach ( var operationProcessor in option . OperationProcessors )
76
+ {
77
+ settings . GeneratorSettings . OperationProcessors . Add ( operationProcessor ) ;
78
+ }
79
+
80
+ var action = option . Configure ;
81
+ action ? . Invoke ( settings ) ;
82
+ }
83
+ }
84
+ }
0 commit comments