.NET 8 + Swashbuckle.AspNetCore: перезаписать URL-адреса для вкладки «Попробуйте» при запуске по дополнительному пути.C#

Место общения программистов C#
Ответить
Anonymous
 .NET 8 + Swashbuckle.AspNetCore: перезаписать URL-адреса для вкладки «Попробуйте» при запуске по дополнительному пути.

Сообщение Anonymous »

Чтобы обеспечить простую, быструю и доступную отладку и дымовое тестирование наших сервисов, мы используем веб-интерфейс Swagger с функцией «Попробовать».

Это хорошо подходит для локальной разработки и обеспечивает быструю обратную связь.
Эти службы развертываются в Kubernetes, и каждая служба, которую мы создаем и развертываем, доступна через собственный подпуть в основном домене приложения, например: Пользовательский интерфейс Swagger доступен через https://app.example.org/book-import/ swagger/index.html, но URL-адреса, сгенерированные в пользовательском интерфейсе, по-прежнему предполагают «нет дополнительного пути», а URL-адреса для запросов «Попробуйте» выглядят следующим образом: https://app.example.org/api/ ... вместо https://app.example.org/book-import/api/...
Я пытался использовать PreSerializeFilters< /code>, но он ведет себя не так, как ожидалось.

Вот что у меня сейчас:

Код: Выделить всё

app.MapSwaggerDefaults(builder.Configuration, swaggerOptions: options =>
{
options.PreSerializeFilters.Add((swagger, httpReq) =>
{
app.Services.GetRequiredService().LogInformation("Swagger path: {Path}", httpReq.Path.Value);
if (httpReq.Path.Value != null && !httpReq.Path.Value.StartsWith("/swagger"))
{
swagger.Servers = new List { new OpenApiServer { Url = httpReq.Path.Value.Replace("/swagger", "!").Split('!')[0] } };
}
});
});
Я пытаюсь заменить часть /swagger на весь URL-адрес запроса, если он не начинается с /swagger.

Выполняется эта версия приложения локально в Visual Studio «работает», потому что я могу установить точку останова в if (httpReq.Path.Value != ..., и там она прерывается. Но > если я запущу этот же код через Visual Studio Kubernetes Bridge в полностью развернутом кластере или и отправлю новый образ, содержащий это изменение, и развернув его в полностью развернутом кластере, это не сработает.
URL-адреса не изменяются в пользовательском интерфейсе Swagger, и я даже не вижу пути Swagger для вывода журнала:
Как я могу установить URL-адреса для Функция «Попробуйте» в пользовательском интерфейсе Swagger, чтобы она работала, когда приложение работает по дополнительному пути?

Или эти PreSerializeFilters работают по-другому на K8s?
То, что я тоже пробовал, но безуспешно:

Код: Выделить всё

builder.Services.AddSwaggerGen(o =>
o.SwaggerGeneratorOptions.Servers = new List { new OpenApiServer { Url = "/book-import" }
});
.NET 8

Swashbuckle.AspNetCore 6.8.1


Подробнее здесь: https://stackoverflow.com/questions/791 ... en-running
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»