У меня был сайт api, использующий swagger, чтобы выставить api. Версия ядра dotnet - 2.1, а swagger - Swashbuckle.AspNetCore 3.0.0. мой сайт api находится за обратным прокси (nginx), URL-адрес nginx - https://www.aa.com/chat, карта для резервного сервера http://127.0.0.1:5003/ и моя конфигурация чванства: ConfigureServices:
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new Info { Title = "aa.IM.CustomerApi", Version = "v1" });
var basePath = Path.GetDirectoryName(typeof(Program).Assembly.Location);
var controllerXmlPath = Path.Combine(basePath, "aa.IM.CustomerApi.xml");
var entityXmlPath = Path.Combine(basePath, "aa.IM.Entity.xml");
c.IncludeXmlComments(controllerXmlPath);
c.IncludeXmlComments(entityXmlPath);
//c.DescribeAllEnumsAsStrings();
});
Настроить:
app.UseSwagger(c =>
{
});
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint("v1/swagger.json", "aa.IM.CustomerApi");
});
затем я могу войти в пользовательский интерфейс https://www.aa.com/chat/swagger/index.html а затем ui может отображать все идеально, но когда я выполняю api (uri - cus / settings), я обнаружил, что URL-адрес запроса https://www.aa.com/cus/settings неверен, правильный URL-адрес - https://www.aa.com/chat/cus/settings.
как я могу исправить мою конфигурацию swagger, чтобы решить проблему? Я пробовал много способов, например http://eatcodelive.com/2017/05/19/change-default-swagger-route-in-an-asp-net-core-web-api/ и Как изменить базовый URL-адрес Swagger в ядре ASP.NET но все это не может решить мою проблему.





Вы можете попробовать переписать свои URL-адреса с помощью app.UseRewriter.
app.UseRewriter(new RewriteOptions()
.AddRewrite(@"/cus/settings", "Chat$1", skipRemainingRules: true));
Обратите внимание, что это не проверено и просто написано у меня из головы.
спасибо всем, я решил это с помощью конфигурации ниже:
app.UseSwagger(c =>
{
c.PreSerializeFilters.Add((doc, requset) =>
{
var root = "https://www.aa.com/chat/";
doc.Host = root;
});
});
в версии dot net framework это можно настроить, установив RootUrl, но в основной версии dotnet можно установить только RoutePrefix, и я стараюсь, чтобы он не работал правильно.