Angular 4 with MVC Routing刷新页面

时间:2017-08-25 00:05:09

标签: asp.net-mvc angular routing .net-core

我有一个带有dotnet core 2和MVC的角度4应用程序。我的主页加载正常,但是当我点击一个应该导致客户端路由的链接时,我会被路由到页面然后刷新。刷新后我在右页但是我想弄清楚如何阻止服务器刷新页面(可能是返回404)然后客户端正确显示站点。

这是我在startup.cs中的路由配置:

app.UseStaticFiles();

app.UseMvc(routes =>
{
      routes.MapSpaFallbackRoute(
      name: "spa-fallback",
      defaults: new { controller = "Home", action = "Index" });
});

以下是我的角度应用中2个路由配置的示例: app模块:

@NgModule({
  declarations: [
      AppComponent,
      ExperienceComponent
  ],
  imports: [
      BrowserModule,
      FormsModule,
      HttpModule,
      AngularFontAwesomeModule,
      PaymentsModule,
      RouterModule.forRoot([
          { path: "home", component: ExperienceComponent },
          { path: "", redirectTo: "/home", pathMatch: "full" },
          { path: "**", redirectTo: "/home" }
      ]),


  ],
  providers: [],
  bootstrap: [AppComponent]
})

和付款模块:

@NgModule({
  providers: [],
  imports: [
      RouterModule.forChild([
          { path: "payments", component: LandingComponent }
      ])
  ],
  declarations: [
      LandingComponent
  ]
})
export class PaymentsModule {

}

当我点击链接将我带到/payments时,我看到“loading ....”显示一秒钟,然后显示LandingComponent的HTML。

1 个答案:

答案 0 :(得分:0)

尝试将此添加到配置方法下的Startup.cs中的请求管道:

app.Use(async (context, next) =>
{
    await next();
    if (context.Response.StatusCode == 404 && !Path.HasExtension(context.Request.Path.Value))
    {
        context.Request.Path = "/home/index";
        await next();
    }
});

基本上你告诉ASP.NET,任何404错误都应该被视为请求留在/ home / index(或者你的SPA代码在哪里 - 在我的情况下它通常只是在/index.html)