Я использую приложение Angular 8 SPA, размещенное на ASP. NET Core 3.1, размещенное в IIS 10.
У меня есть случай использования, когда пользователь приложения получает электронное письмо который содержит гиперссылку на метод контроллера Web API.
Например:
https://test.myapp.fr/api/ExternalCommands/ManageDati?a=C3hl5%2FMgXdldyX4ssmgyayMP3xE%2Bi%2
Когда этот URL используется через HTTP-клиент (в моем случае AR C), он работает.
Если он используется через браузер по умолчанию, также размещает приложение SPA , он завершается неудачно, не достигая сервер как есть. Он переписан для достижения компонента notFound :
https://test.myapp.fr/notFound?a=C3hl5%2FMgXdldyX4ssmgyayMP3xE%2Bi%2
Вот метод контроллера:
[HttpGet]
[AllowAnonymous]
public async Task<IActionResult> ManageDati(string a, CancellationToken cancellationToken)
{
}
Компонент:
Какие у меня варианты здесь? Должен ли я размещать веб-API вне области приложения SPA?
РЕДАКТИРОВАТЬ: Вот конфигурация маршрутизации по умолчанию:
app.UseMvc(routes =>
{
routes.MapRoute("externalcommands", "api/ExternalCommands/{action}/{id?}", defaults: new { controller = "ExternalCommands", action = "ManageDati" });
routes.MapRoute(name: "default", template: "api/{controller}/{action}/{id?}");
});
РЕДАКТИРОВАТЬ 2:
Для подтверждения моего отметив, что запрос никогда не достигает сервера, я включил Angular трассировку маршрутизатора в app.router.ts
:
...
@NgModule({
imports: [RouterModule.forRoot(APP_ROUTES, { enableTracing: true })],
...
Я вижу, что Angular logi router 10 * обрабатывает мой запрос и перенаправляет на компонент notFound.
Работает то же приложение в отладчике под IIS Express: URL-адрес отправляется на сервер как есть, маршрутизатор angular ничего не делает.
Очень странно.
РЕДАКТИРОВАТЬ 3:
Это работает с IIS Express / Angular Live сервер разработки, потому что они используют разные порты.