Как указать схему https
в версии Swashbuckle .NET Core
? В версии ASP.NET я мог бы сделать
.EnableSwagger(c =>
{
c.Schemes(new[] { "https" });
}
но я не вижу ничего подобного в составе AddSwaggerGen.
Как указать схему https
в версии Swashbuckle .NET Core
? В версии ASP.NET я мог бы сделать
.EnableSwagger(c =>
{
c.Schemes(new[] { "https" });
}
но я не вижу ничего подобного в составе AddSwaggerGen.
Просто реализуйте интерфейс IDocumentFilter
и используйте его в Startup.cs
:
public class TestFilter : IDocumentFilter
{
public void Apply(SwaggerDocument swaggerDoc, DocumentFilterContext context)
{
swaggerDoc.Schemes = new string[] { "http" };
}
}
// Startup.cs
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v2", new Swashbuckle.AspNetCore.Swagger.Info
{ Title = "My API", Version = "v2" });
c.DocumentFilter<TestFilter>();
});
swaggerDoc.Schemes
не разрешается.
- person Lost; 28.02.2020
У меня сработало решение от @marius, за исключением локального запуска. Как он справедливо отмечает, httpReq.Host.Host не будет указывать номер порта. В качестве улучшения приведенный ниже фрагмент кода сохраняет номер порта и работает как на локальном хосте, так и на размещенном API. ПРИМЕЧАНИЕ: мой локальный хост находится на HTTP
Версия пакета Nuget: Swashbuckle.AspNetCore 6.0.7
app.UseSwagger(options =>
{
options.PreSerializeFilters.Add((swagger, httpReq) =>
{
var scheme = httpReq.Host.Host.StartsWith("localhost", StringComparison.OrdinalIgnoreCase) ? "http" : "https";
swagger.Servers = new List<OpenApiServer>() {new OpenApiServer() {Url = $"{scheme}://{httpReq.Host}"}};
});
});
В Swashbuckle.AspNetCore v 6.0.7 вы можете сделать это:
app.UseSwagger(c => {
c.PreSerializeFilters.Add((swagger, httpReq) =>
{
swagger.Servers = new List<OpenApiServer> { new OpenApiServer { Url = $"https://{httpReq.Host.Host}" } };
});
});
Обратите внимание: в приведенном выше примере предполагается порт 443, вам также необходимо будет указать номер порта https, если это не так.
using Microsoft.OpenApi.Models;
в верхней части файла вместе с другими операторами использования. Также немного пробелов никогда не повредит с новыми строками после этих фигурных / лицевых скобок :wink:.
- person MrMesees; 01.04.2021
Вы можете использовать этот код в последней версии swagger:
public class SwaggerDocumentFilter : IDocumentFilter
{
private readonly string _swaggerDocHost;
public SwaggerDocumentFilter(IHttpContextAccessor httpContextAccessor)
{
var host = httpContextAccessor.HttpContext.Request.Host.Value;
var scheme = httpContextAccessor.HttpContext.Request.Scheme;
_swaggerDocHost = $"{scheme}://{host}";
}
public void Apply(OpenApiDocument swaggerDoc, DocumentFilterContext context)
{
swaggerDoc.Servers.Add(new OpenApiServer { Url = _swaggerDocHost });
}
}
Если вы хотите установить _swaggerDocHost=https://имя сайта.