angular 使用 url 手动导航时应用 404 秒

angular app 404s when navigating with url manually

我有一个 Angular 7 网站,它使用 MVC 并托管在 IIS 上。

由于我们使用 MVC,我们在 _Layout.cshtml(使用 @RenderBody())中提供 index.html,然后使用控制器提供 index.cshtml,其中包含<app-root></app-root> 标签

该应用程序工作正常,但是,当尝试手动导航到 url 时(例如 http://my-site.com/endpoint)在使用导航控件时可以访问,但在地址栏中手动输入时,它抛出 404 错误。

我一直看到 "Redirect to index.html",但 index.html 存在于 angular 应用程序中并且无法访问 url,除非导航至 http://my-site.com/index.html。那么我如何通过重定向到 index.html 来提供我的端点视图呢?我该怎么做?

我已经在 SO 上进行了大量阅读和尝试,但没有任何内容真正符合我的问题,而且我似乎没有取得任何进展。

如果您需要查看我的代码,请告诉我,但根据我的阅读,这需要在托管服务器上处理。任何帮助将不胜感激。

当您使用导航控件导航时,您使用的是 angular 路由器模块,但是当您键入终点时,我觉得 IIS 正在寻找 "outside" Angular。

您是否尝试过将 LocationStrategy 作为提供者导入并在 app.module.ts 文件中使用 HashLocationStrategy?

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

此策略将在您的 Angular 应用程序中的所有路径前加上 /#/ 并确保任何 # 片段不会发送到 IIS 服务器。

我最终找到了这个问题的解决方案。

如果您的 angular 站点包含在 MVC 应用程序中,您可以在 startup.cs 中设置 MVC 路由以强制任何非 MVC 路由使用 controller/view提供 angular 申请。

这将允许您使用手动输入的 URL 导航到 angular 路线,但它会强制重新加载页面。 (就我而言,这不是问题)。

下面是我的代码

Startup.cs中:

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

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