/
SwaggerGeneratorOptions.cs
90 lines (69 loc) · 3.46 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
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.AspNetCore.Mvc.ApiExplorer;
using Microsoft.OpenApi.Models;
using Microsoft.AspNetCore.Routing;
namespace Swashbuckle.AspNetCore.SwaggerGen
{
public class SwaggerGeneratorOptions
{
public SwaggerGeneratorOptions()
{
SwaggerDocs = new Dictionary<string, OpenApiInfo>();
DocInclusionPredicate = DefaultDocInclusionPredicate;
OperationIdSelector = DefaultOperationIdSelector;
TagsSelector = DefaultTagsSelector;
SortKeySelector = DefaultSortKeySelector;
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 DescribeAllParametersInCamelCase { get; set; }
public List<OpenApiServer> Servers { get; set; }
public IDictionary<string, OpenApiSecurityScheme> SecuritySchemes { get; set; }
public IList<OpenApiSecurityRequirement> SecurityRequirements { 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.FirstOrDefault(m => m is IEndpointNameMetadata) as IEndpointNameMetadata)?.EndpointName;
#else
return actionDescriptor.AttributeRouteInfo?.Name;
#endif
}
private IList<string> DefaultTagsSelector(ApiDescription apiDescription)
{
return new[] { apiDescription.ActionDescriptor.RouteValues["controller"] };
}
private string DefaultSortKeySelector(ApiDescription apiDescription)
{
return TagsSelector(apiDescription).First();
}
}
}