Есть API Controller который имеет вот такой endpoint:
[ProducesResponseType(StatusCodes.Status200OK)]
[HttpGet("get-all-alert-sets")]
public async Task<IActionResult> GetAllAlertSets([FromQuery] bool newestFirst = true)
{
var allAlertSets = await alertSetRepository.GetAllAlertSets(newestFirst);
var yaml = YamlHelper.SerializeObjectThroughUnderscoredNamingConvention(allAlertSets);
logger.LogInformation(yaml);
return Content(yaml, "application/yaml");
}
Данный endpoint работает быстро, суммарно потребовалось 160 млс чтобы репозиторий вернул ответ и yaml создался.
Program.cs:
public class Program
{
private static async Task Main(string[] args)
{
...
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen(opts =>
{
opts.EnableAnnotations();
opts.MapType<Ulid>(() => new OpenApiSchema
{
Type = "string",
Format = "ulid",
Example = new OpenApiString("01KJQP6EE9NS5K8YJS0Y4T0CY8")
});
opts.SwaggerDoc(
name: "v1",
info: new OpenApiInfo
{
Title = "Kvindo.MonitoringSystem.WebApi v1",
Version = "v1"
});
var xmlPath = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
xmlPath = Path.Combine(AppContext.BaseDirectory, xmlPath);
opts.IncludeXmlComments(xmlPath);
});
...
var app = builder.Build();
...
app.UseSwagger();
app.UseSwaggerUI(options =>
{
options.SwaggerEndpoint("/swagger/v1/swagger.json", "Kvindo.MonitoringSystem.WebApi v1");
});
app.UseRouting();
app.MapControllers();
app.Run();
}
}
В целом API работает хорошо, проверял через curl, все ок, ответ моментальный, а вот Swagger после выполнения запроса просто бесконечно крутит "загрузку", так же отправляет в консоль ошибку:
RangeError: Maximum call stack size exceeded
at OrderedMap.set (swagger-ui-bundle.js:2:70592)
at swagger-ui-bundle.js:2:60197
at ObjectSeq.__iterate (swagger-ui-bundle.js:2:36134)
at ObjectSeq.forEach (swagger-ui-bundle.js:2:84933)
at swagger-ui-bundle.js:2:60165
at OrderedMap.withMutations (swagger-ui-bundle.js:2:44734)
at Object.OrderedMap (swagger-ui-bundle.js:2:60087)
at fromJSOrdered (swagger-ui-bundle.js:2:543049)
at swagger-ui-bundle.js:2:62227
at ArraySeq.__iterate (swagger-ui-bundle.js:2:35590)
Именно дело в Swagger-е и обработке ответа, потому что я смотрел дебагером, endpoint выполнялся быстро.
Swagger.json проверял через editor.swagger.io, на нем все быстро и правильно запустилось, меньше секунды заняло.
Есть варианты в чем дело? Пробывал менять Content на File или просто Ok(yaml), пробывал атрибуты добавлять/менять, резултат тот же. При том что yaml не большой. Возможно он просто имеет много "веток", ну то есть класс внутри множество других классов.