Ответ 1
Для Swashbuckle 5.x:
Это, по-видимому, задается методом расширения httpConfiguration с именем EnableSwagger. Swashbuckle 5.x readme отмечает, что это заменяет SwaggerSpecConfig. SwaggerDocConfig RootUrl() специально заменяет ResolveBasePathUsing() с 4.x.
Это практически работает так же, как и раньше, похоже, что самое большое изменение было в том, что оно было переименовано и перенесено в SwaggerDocConfig:
public void RootUrl(Func<HttpRequestMessage, string> rootUrlResolver)
Пример из readme, измененный для краткости:
string myCustomBasePath = @"http://mycustombasepath.com";
httpConfiguration
.EnableSwagger(c =>
{
c.RootUrl(req => myCustomBasePath);
// The rest of your additional metadata goes here
});
Для Swashbuckle 4.x:
Используйте SwaggerSpecConfig ResolveBasePathUsing и попросите свою лямбда прочитать вашу известную конечную точку.
ResolveBasePathUsing:
public SwaggerSpecConfig ResolveBasePathUsing(Func<HttpRequestMessage, string> basePathResolver);
Мой API находится за балансировщиком нагрузки, и это было полезным решением для предоставления базового адреса. Вот глупый пример использования ResolveBasePathUsing для разрешения пути с известным базовым путем.
string myCustomBasePath = @"http://mycustombasepath.com";
SwaggerSpecConfig.Customize(c =>
{
c.ResolveBasePathUsing((req) => myCustomBasePath);
}
Я четко определил конечную точку для ясности, но вы можете определить ее в любом месте. Вы даже можете использовать объект запроса, чтобы попытаться очистить свой uri запроса, чтобы указать на /web/api вместо /api.
Разработчик прокомментировал это обходное решение GitHub в прошлом году:
Лямбда принимает текущий HttpRequest (т.е. Запрос для данной Swagger ApiDeclaration) и должен возвращать строку, которая будет использоваться как baseUrl для вашего Api. Для приложений с балансировкой нагрузки это должно возвращать путь балансировки нагрузки.
Реализация по умолчанию выглядит следующим образом:
(req) => req.RequestUri.GetLeftPart(UriPartial.Authority) + req.GetConfiguration().VirtualPathRoot.TrimEnd('/');
...
Re относительные пути, спецификация Swagger требует абсолютных путей, потому что URL-адрес, на котором выполняется Swagger, не обязательно должен быть URL-адресом фактического API.
...
Лямбда передается экземпляр HttpRequestMessage... вы должны иметь возможность использовать это для доступа к RequestUri и т.д. Другой вариант: вы можете просто поместить имя хоста в ваш web.config и попросить лямбда просто прочитать его оттуда.