У меня есть проект, который использует как 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" }
);