Я создал приложение с ASP.NET Boilerplate (ABP), используя шаблон Module Zero Core (Angular и ASP.NET Core, за исключением того, что я использую .NET Full Framework 4.x). Он работает нормально, когда я выполняю стандартное развертывание в IIS (Angular работает на порту 80, ASP.NET Web API работает на порту 21021). Однако у меня возникают проблемы с интеграцией Swagger, если я пытаюсь развернуть Web API в приложении IIS (аналогично виртуальному каталогу). Предыдущие ответы, которые я нашел, не дали решения проблемы.
Например, URL-адрес приложения IIS - http://example.com/myapi
. Переход по этому URL должен перенаправить на http://example.com/myapi/swagger
, но вместо этого он перенаправляется на http://example.com/swagger
, которого не существует. ServerRootAddress установлен в http://example.com/myapi
в appsettings.json. Это может быть связано со следующим кодом в HomeController проекта Web.Host:
public IActionResult Index()
{
return Redirect("/swagger");
}
Кажется, что он жестко запрограммирован в корне веб-сайта, а не использует относительный путь, но я не уверен. Если я изменю контроллер для использования относительного пути, загрузится страница Swagger, но я не смогу аутентифицироваться. Он пытается перейти к http://example.com/api/TokenAuth/Authenticate
вместо http://example.com/myapi/api/TokenAuth/Authenticate
. Опять же, он не использует относительный путь. Вот соответствующий код из abp.swagger.js:
xhr.open('POST', '/api/TokenAuth/Authenticate', true);
Это ограничение ABP или шаблона Module Zero Core, или мне нужно выполнить какую-то дополнительную настройку в ABP, Swagger / Swashbuckle или IIS, чтобы это работало? FWIW, приложение работает на ABP версии 3.8.