2

我有一个项目同时使用 mvc razor 视图和 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 中的调试也有点烦人。有没有人对如何解决它有任何建议,或者可能提供以不同方式处理我们的情况的想法?如果可能的话,也许解决方案会以某种方式告诉应用程序在用户找到正确的路线之前不要对角度做任何事情?

我们有一个名为 _Layout.cshtml 的视图(基本上是应用程序的入口页面)。在这个视图中,我们有一些代码:

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

添加它是因为我们注意到没有它,角度站点只是空白。有了它,我们注意到一些锚标签损坏导致网站的某些部分无法运行。

要输入 angular,我们有一个带有 index.cshtml 文件的视图,我们只有:

<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" }
        );
4

0 回答 0