/
SwaggerGeneratorOptions.cs
112 lines (88 loc) · 4.35 KB
/
SwaggerGeneratorOptions.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
using System;
using System.Collections.Generic;
using System.Linq;
#if NET6_0_OR_GREATER
using Microsoft.AspNetCore.Http.Metadata;
#endif
using Microsoft.AspNetCore.Mvc.ApiExplorer;
using Microsoft.OpenApi.Models;
using Microsoft.AspNetCore.Routing;
using Microsoft.AspNetCore.Authentication;
namespace Swashbuckle.AspNetCore.SwaggerGen
{
public class SwaggerGeneratorOptions
{
public SwaggerGeneratorOptions()
{
SwaggerDocs = new Dictionary<string, OpenApiInfo>();
DocInclusionPredicate = DefaultDocInclusionPredicate;
OperationIdSelector = DefaultOperationIdSelector;
TagsSelector = DefaultTagsSelector;
SortKeySelector = DefaultSortKeySelector;
SecuritySchemesSelector = null;
SchemaComparer = StringComparer.Ordinal;
Servers = new List<OpenApiServer>();
SecuritySchemes = new Dictionary<string, OpenApiSecurityScheme>();
SecurityRequirements = new List<OpenApiSecurityRequirement>();
ParameterFilters = new List<IParameterFilter>();
RequestBodyFilters = new List<IRequestBodyFilter>();
OperationFilters = new List<IOperationFilter>();
DocumentFilters = new List<IDocumentFilter>();
}
public IDictionary<string, OpenApiInfo> SwaggerDocs { get; set; }
public Func<string, ApiDescription, bool> DocInclusionPredicate { get; set; }
public bool IgnoreObsoleteActions { get; set; }
public Func<IEnumerable<ApiDescription>, ApiDescription> ConflictingActionsResolver { get; set; }
public Func<ApiDescription, string> OperationIdSelector { get; set; }
public Func<ApiDescription, IList<string>> TagsSelector { get; set; }
public Func<ApiDescription, string> SortKeySelector { get; set; }
public bool InferSecuritySchemes { get; set; }
public Func<IEnumerable<AuthenticationScheme>, IDictionary<string, OpenApiSecurityScheme>> SecuritySchemesSelector { get; set;}
public bool DescribeAllParametersInCamelCase { get; set; }
public List<OpenApiServer> Servers { get; set; }
public IDictionary<string, OpenApiSecurityScheme> SecuritySchemes { get; set; }
public IList<OpenApiSecurityRequirement> SecurityRequirements { get; set; }
public IComparer<string> SchemaComparer { get; set; }
public IList<IParameterFilter> ParameterFilters { get; set; }
public List<IRequestBodyFilter> RequestBodyFilters { get; set; }
public List<IOperationFilter> OperationFilters { get; set; }
public IList<IDocumentFilter> DocumentFilters { get; set; }
private bool DefaultDocInclusionPredicate(string documentName, ApiDescription apiDescription)
{
return apiDescription.GroupName == null || apiDescription.GroupName == documentName;
}
private string DefaultOperationIdSelector(ApiDescription apiDescription)
{
var actionDescriptor = apiDescription.ActionDescriptor;
// Resolve the operation ID from the route name and fallback to the
// endpoint name if no route name is available. This allows us to
// generate operation IDs for endpoints that are defined using
// minimal APIs.
#if (!NETSTANDARD2_0)
return
actionDescriptor.AttributeRouteInfo?.Name
?? (actionDescriptor.EndpointMetadata?.LastOrDefault(m => m is IEndpointNameMetadata) as IEndpointNameMetadata)?.EndpointName;
#else
return actionDescriptor.AttributeRouteInfo?.Name;
#endif
}
private IList<string> DefaultTagsSelector(ApiDescription apiDescription)
{
#if (!NET6_0_OR_GREATER)
return new[] { apiDescription.ActionDescriptor.RouteValues["controller"] };
#else
var actionDescriptor = apiDescription.ActionDescriptor;
var tagsMetadata = actionDescriptor.EndpointMetadata?.LastOrDefault(m => m is ITagsMetadata) as ITagsMetadata;
if (tagsMetadata != null)
{
return new List<string>(tagsMetadata.Tags);
}
return new[] { apiDescription.ActionDescriptor.RouteValues["controller"] };
#endif
}
private string DefaultSortKeySelector(ApiDescription apiDescription)
{
return TagsSelector(apiDescription).First();
}
}
}