我有一个带有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。
答案 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)