Вызов метода Angular 8 WebAPI для контроллера через ссылку HTTPS GET - PullRequest
2 голосов
/ 11 февраля 2020

Я использую приложение 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)
{
}

Компонент:

enter image description here

Какие у меня варианты здесь? Должен ли я размещать веб-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 сервер разработки, потому что они используют разные порты.

Ответы [ 2 ]

1 голос
/ 11 февраля 2020

вам нужно добавить правила / настройки перезаписи URL для вашего API в файле web.config.

по умолчанию ваш домен будет искать angular маршрутизацию (так как большинство приложений angular будут упоминать SpaRewriteRule как "*" , иначе приложение, размещенное на IIS, будет маршрутизировать к маршрутам Controller / Action Action), если вы хотите ограничить маршрутизацию angular для указанных c URL-адресов, вам необходимо добавить конфигурацию URL для перезаписи в Интернете .config файл

<rewrite>
      <rules>
        <rule name="SpaRewriteRule" stopProcessing="true">
          <match url=".*"/>
          <conditions logicalGrouping="MatchAll">
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true"/>
            <add input="{REQUEST_URI}" pattern="^/(api)" negate="true"/>
          </conditions>
          <action type="Rewrite" url="/index.html"/>
        </rule>
        <rule name="ApiProxyRule" stopProcessing="true"> // add this rule
          <match url="api/(.*)"/> 
          <action type="Rewrite" url="http://YOUR_API_URLS/api/{R:1}"/>
        </rule>
      </rules>
    </rewrite>
0 голосов
/ 11 февраля 2020

Я думаю, что Api всегда будет скрыт. Если вы хотите вызвать API, вы делаете это только с angular.

Электронная почта содержит URL-путь к angular route вместо api, и вы должны создать компонент для маршрутизации того, что обрабатывает этот URL, с помощью params и вызова api.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...