Как мне обработать базовую ссылку, если в моем проекте используются angular и бритва, в зависимости от маршрута, который вы выбрали? - PullRequest
0 голосов
/ 27 марта 2020

У меня есть проект, который использует как mvc виды бритвы, так и angular 8. В зависимости от пройденного маршрута, будет обслуживаться один или другой. Моя маршрутизация работает по большей части, и я могу правильно загрузить свои страницы. На данный момент, когда пользователи перейдут на домашнюю страницу, они получат бритву. В консоли я получаю ошибку

No base href set. Please provide a value for the APP_BASE_HREF token or add a base element to the 
document.

Сама ошибка, похоже, ничего не нарушает, но отчасти раздражает, когда ее видят во всех журналах (db, insights). Это также делает отладку в IE немного раздражающей. У кого-нибудь есть какие-либо предложения о том, как это исправить, или, может быть, какие-то идеи по поводу нашей ситуации? Если возможно, может быть, решение как-то говорит приложению ничего не делать с angular до тех пор, пока пользователь не выберет правильный маршрут?

У нас есть представление с именем _Layout.cs html (в основном это страница входа для применение). В этом представлении у нас есть некоторый код:

@{ 
    var containsAngularRoute = Request.RawUrl.Contains("/app/");
    if (containsAngularRoute)
    {
        <base href="/" />
    }
  }

Это было добавлено, потому что мы заметили, что без него сайт angular просто пуст. И вместе с этим мы заметили, что некоторые якорные теги ломаются, что приводит к тому, что определенные части сайта не работают.

Чтобы ввести angular, у нас есть представление с файлом index.cs html, и у нас это просто:

<app-root></app-root>

В представлении есть контроллер, который просто возвращает представление:

[RoutePrefix("app")]
    public class AngularEntryController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }
    }

Файл RouteConfig.cs выглядит следующим образом:

    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        // enables attributes routing
        routes.MapMvcAttributeRoutes();

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
            constraints: new
            {
                serverRoute = new ServerRouteConstraint(url =>
                {
                    return !url.PathAndQuery.StartsWith("/app", StringComparison.InvariantCultureIgnoreCase);
                })
            });


        routes.MapRoute(
            name: "angular",
            url: "{*url}",
            defaults: new { controller = "AngularEntry", action = "Index" }
        );
...