手动浏览网址时的角度应用程序404s

时间:2019-01-08 21:31:22

标签: angular iis url-routing

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

由于我们正在使用MVC,因此我们在_Layout.cshtml(使用@RenderBody())内提供index.html,然后使用控制器来提供index.cshtml,该控制器容纳{{1} }标签

该应用程序运行良好,但是,当尝试使用导航控件时可以尝试手动导航到url(例如<app-root></app-root>),但是在地址栏中手动输入该应用程序时,会引发404错误。

我一直看到“重定向到index.html”,但是index.html存在于angular应用程序中,除非访问到http://my-site.com/endpoint,否则它不是可访问的url。那么,如何通过重定向到index.html来提供端点视图服务?我什至该怎么做?

在SO上,我已经做了大量的阅读和尝试工作,但是没有什么真正适合我的问题,而且我似乎也没有取得任何进展。

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

2 个答案:

答案 0 :(得分:0)

当您使用导航控件进行导航时,您正在使用角度路由器模块,但是当您键入终点时,我觉得IIS正在Angular的外部寻找该路径。

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

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

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

答案 1 :(得分:0)

我最终找到了解决此问题的方法。

如果将角度站点包裹在MVC应用程序中,则可以在startup.cs中设置MVC路由,以强制任何非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" });
 });