угловое приложение 404s при навигации по URL вручную - PullRequest
0 голосов
/ 09 января 2019

У меня есть веб-сайт Angular 7, который использует MVC и размещен на IIS.

Поскольку мы используем MVC, мы обслуживаем index.html в _Layout.cshtml (используя @RenderBody()), который затем использует контроллер для обслуживания index.cshtml, в котором хранятся теги <app-root></app-root>

Приложение работает просто отлично, однако при попытке навигации по URL-адресу вручную (например, http://my-site.com/endpoint) доступно при использовании элемента управления навигацией, но при вводе его вручную в адресной строке выдается ошибка 404.

Я продолжаю видеть «Redirect to index.html», но index.html существует в угловом приложении и не является доступным URL-адресом, если не перейти к http://my-site.com/index.html. Итак, как мне обслуживать мое представление конечной точки путем перенаправления на index.html? Как мне вообще это сделать?

Я довольно много читал и пробовал что-то здесь, на SO, но на самом деле ничто не соответствует моей проблеме, и я, похоже, не продвигаюсь вперед.

Дайте мне знать, если вам нужно увидеть мой код, но из того, что я прочитал, это должно быть обработано на хост-сервере. Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 09 января 2019

В итоге я нашел решение этой проблемы.

Если ваш угловой сайт обернут в приложение MVC, вы можете настроить маршруты MVC в файле startup.cs, чтобы заставить любой маршрут не-MVC использовать контроллер / представление, обслуживающее угловое приложение.

Это позволит вам перейти к угловому маршруту, используя введенный вручную URL, однако это приведет к перезагрузке страницы. (для моих целей это не проблема).

ниже мой код

В Startup.cs:

app.UseMvc(routes =>
{
    routes.MapRoute(
        name: "mvc",
        template: "{controller}/{action}");

    routes.MapRoute(
        name: "default",
        template: "{*url}",
        defaults: new { controller = "Home", action = "Index" });
 });
0 голосов
/ 09 января 2019

Когда вы используете навигационный элемент управления, вы используете модуль углового маршрутизатора, но когда вы набираете конечную точку, мне кажется, что IIS ищет этот путь «за пределами» Angular.

Вы пытались импортировать LocationStrategy в качестве поставщика и использовать HashLocationStrategy в файле app.module.ts?

providers: [
    { provide: LocationStrategy, useClass:HashLocationStrategy }
],

Эта стратегия префиксует все пути в вашем Angular-приложении с / # / и следит за тем, чтобы любые # фрагменты не отправлялись на сервер IIS.

...