Я пытаюсь обновить. net API до. net core 3.1. Для того, чтобы это работало, я также должен перейти на Swashbuckle.AspNetCore 5.0. Это работает из коробки в localhost, но при развертывании не может найти файл чванства. json файл.
Startup.cs
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.Use(async (context, next) =>
{
context.Request.Path = context.Request.Path.Value.Replace("/api-svc", "");
await next.Invoke();
});
app.UseSwagger();
app.UseSwaggerUI(s =>
{
s.SwaggerEndpoint("/swagger/v1/swagger.json", "api v1");
});
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseDefaultFiles();
app.UseMiddleware<CustomExceptionHandlerMiddleware>();
app.UseResponseCompression();
app.UseCors("AllowAll");
app.UseRouting();
app.UseAuthentication();
app.UseMvc();
}
Ошибка извлечения: не определено /swagger/v1/swagger.json
Сеть показывает, что пытается извлечь файл из этого URL: https://api.com/swagger/v1/swagger.json, который правильно выдает ошибку:
Балансировщик нагрузки не имеет соответствующего маршрута. Что-то не так с вашим запросом!.
URL должен был быть: https://api.com/api-svc/swagger/v1/swagger.json. Потому что, когда я набираю это вручную, он отвечает файлом json.
Поэтому я попытался установить базовый путь (https://github.com/domaindrivendev/Swashbuckle.AspNetCore/issues/1173);
if (env.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI(s =>
{
s.SwaggerEndpoint("/swagger/v1/swagger.json", "api v1");
});
}
else
{
app.UseSwagger(c =>
{
c.PreSerializeFilters.Add((swaggerDoc, request) =>
{
swaggerDoc.Servers = new List<OpenApiServer> { new OpenApiServer { Url = $"{request.Scheme}://{request.Host.Value}{Configuration["VIRTUAL_PATH"]}" } };
});
});
app.UseSwaggerUI(s =>
{
s.SwaggerEndpoint("/swagger/v1/swagger.json", "api");
});
}
Но та же ошибка сохраняется. Кто-нибудь может указать мне правильное направление?
[Обновить]
(https://github.com/domaindrivendev/Swashbuckle.AspNetCore/issues/1253) Использование относительных путей заставило все выглядеть правильно:
app.UseSwagger();
app.UseSwaggerUI(s => {
s.SwaggerEndpoint("v1/swagger.json", "api v1");
});
Проблема теперь в том, что фактический URL-адрес запроса API равен https://api.com/health, когда он должен быть https://api.com/api-svc/health