#c# #swagger #nswag #codegen
#c# #развязность #nswag #codegen
Вопрос:
Я использую NSwag для создания документации по коду, но хотел бы иметь возможность настраивать, в каком порядке конечные точки отображаются в сгенерированной конечной точке swagger. Возможно, через атрибут в методах контроллера.
Я не вижу никакого способа добиться этого. В нескольких других сообщениях упоминается буквенно-цифровой порядок, но мне нужно иметь возможность определять пользовательский порядок. Есть ли какой-либо способ сделать это?
Мой SwaggerConfig
public class SwaggerApiConfig
{
public Assembly TargetWebAssembly { get; }
public Action<SwaggerUi3Settings<WebApiToSwaggerGeneratorSettings>> ConfigureUiSettings { get; }
public SwaggerApiConfig(
string uiRoute,
Assembly targetWebAssembly,
string apiName,
string description,
string team = null,
string appDocumentationUrl = null)
{
if (!uiRoute.StartsWith("/"))
uiRoute = string.Format("/{0}", (object) uiRoute);
this.TargetWebAssembly = targetWebAssembly;
this.ConfigureUiSettings = SwaggerApiConfig.BuildSwaggerUiSettings(uiRoute, this.TargetWebAssembly, apiName, description, team, appDocumentationUrl);
}
public SwaggerApiConfig(
Assembly targetWebAssembly,
Action<SwaggerUi3Settings<WebApiToSwaggerGeneratorSettings>> configureUiSettings)
{
this.TargetWebAssembly = targetWebAssembly;
this.ConfigureUiSettings = configureUiSettings;
}
public static Action<SwaggerUi3Settings<WebApiToSwaggerGeneratorSettings>> BuildSwaggerUiSettings(
string uiRoute,
Assembly targetWebAssembly,
string apiName,
string description,
string team = null,
string appDocumentationUrl = null)
{
if (!uiRoute.StartsWith("/"))
uiRoute = string.Format("/{0}", (object) uiRoute);
return (Action<SwaggerUi3Settings<WebApiToSwaggerGeneratorSettings>>) (settings =>
{
settings.SwaggerUiRoute = uiRoute;
settings.SwaggerRoute = string.Format("{0}/swagger.json", (object) uiRoute);
settings.DocExpansion = "list";
settings.GeneratorSettings.Title = apiName;
settings.GeneratorSettings.Version = string.Format("{0}", (object) targetWebAssembly.GetName().Version);
settings.GeneratorSettings.Description = description;
settings.GeneratorSettings.IgnoreObsoleteProperties = false;
settings.GeneratorSettings.GenerateKnownTypes = true;
settings.GeneratorSettings.GenerateAbstractProperties = true;
settings.GeneratorSettings.DefaultEnumHandling = EnumHandling.String;
settings.GeneratorSettings.OperationProcessors.Add((IOperationProcessor) new CallerHeaderOperationProcessor());
settings.PostProcess = (Action<SwaggerDocument>) (x =>
{
x.Security = (ICollection<SwaggerSecurityRequirement>) new List<SwaggerSecurityRequirement>();
x.Info.Contact = new SwaggerContact()
{
Name = team,
Url = appDocumentationUrl
};
});
});
}
Как это затем применяется в моем приложении
if (swaggerApiOptions != null)
{
foreach (var swaggerApiConfig in swaggerApiOptions.Configurations)
{
appBuilder.UseSwaggerUi3(swaggerApiConfig.TargetWebAssembly, swaggerApiConfig.ConfigureUiSettings);
}
}
Комментарии:
1. Может быть, проверить github.com/RicoSuter/NSwag/issues/2879 ): > * Рикосьютер: Вы можете попытаться изменить порядок элементов в спецификации с помощью обработчика документов или постпроцесса. > * Saibamen: Как? > * RicoSuter: при последующей обработке вы переупорядочиваете коллекцию путей документа…
Ответ №1:
Это, скорее всего, не даст вам всего, что вам нужно, но стоит отметить, что класс SwaggerUi3Settings содержит OperationsSorter
настройку.