После поиска везде я смог собрать кучу тупых ссылок и найти решение.
Kestrel будет в режиме HTTP, но ему будет сказано, что он находится в режиме HTTPS посредством ForwardedHeaders от обратного прокси. В случае Azure есть определенный набор, который вы должны использовать. Другие потребуют других опций и могут потребовать дополнительной настройки. Эта документация поможет вам в общем случае, но в ней нет того, что необходимо для Azure: Конфигурация обратного прокси-сервера и балансировщика нагрузки ASPNet Core
Если вы используете IIS, он работает только потому, что он встроен, или вы добавили UseIIS в прошлых версиях Core.
Для веб-служб Azure в контейнере ИЛИ в базе Linux необходимо добавить следующий пакет Nuget:
Microsoft.AspNetCore.HttpOverrides
Как только это будет добавлено в Configure in Startup.cs как самое первое, вам нужно добавить следующее:
var forwardOptions = new ForwardedHeadersOptions
{
ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto,
RequireHeaderSymmetry = false
};
forwardOptions.KnownNetworks.Clear();
forwardOptions.KnownProxies.Clear();
app.UseForwardedHeaders(forwardOptions);
Обратите внимание, что без KnownNetworks и KnownProxies Clear () он не будет работать. И это не будет работать без RequireHeaderSymmetry = false, поэтому вам нужно все это.
На ForwardedHeaders вы хотите попытаться избежать. Все или другой вариант, который указан в списке, потому что он имеет уязвимость безопасности.
Затем в настройках приложения необходимо добавить WEBSITES_PORT=80
, ASPNETCORE_URLS=http://+:80
и ASPNETCORE_HTTPS_PORT=443
. Пока все это не будет, вы продолжите получать немного другую ошибку.
Примечание: это не исправит валидатор Swagger. У него есть другие проблемы, потому что валидатор не прав. JSON все еще действителен, но домен другой, поэтому он выходит из себя. Самый простой способ решить эту проблему - установить параметры UseSwaggerUi.EnableValidator (null);
app.UseSwaggerUI(
options =>
{
options.EnableValidator(null);
});