Проблема при запуске ABP Web API в приложении IIS (виртуальный каталог) - PullRequest
0 голосов
/ 12 июня 2019

Я создал приложение с 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.

1 Ответ

0 голосов
/ 15 июня 2019

Я закончил тем, что изменил код шаблона ABP, чтобы при необходимости использовать относительные пути.

HomeController.cs:

public IActionResult Index()
{
    return Redirect("~/swagger");
}

abp.swagger.js:

xhr.open('POST', '../api/TokenAuth/Authenticate', true);
...
xhrTenancyName.open('POST', '../api/services/app/Account/IsTenantAvailable', true);

Для использования SignalR потребуются дополнительные изменения.

В приложении Angular также потребовалось несколько изменений.

index.html:

<base href="/myvirtualpath/">

боковая панель-пользователь area.component.html:

<img src="assets/images/user.png" width="48" height="48" alt="User" />
...