您看到的问题与客户端上的 Angular 路由和 MVC 服务器端路由之间的区别有关。您实际上得到了一个404 Page Not Found
错误,因为服务器没有该路由的控制器和操作。我怀疑你没有处理错误,这就是为什么它看起来好像什么也没发生。
当您重新加载http://localhost:5000/aboutus
或尝试直接从快捷方式链接到该 URL 或通过在地址栏中键入它(深度链接)时,它会向服务器发送请求。ASP.NET MVC 将尝试解析该路由,在您的情况下,它将尝试加载aboutusController
并运行该Index
操作。当然,这不是你想要的,因为你的aboutus
路由是一个 Angular 组件。
您应该做的是为 ASP.NET MVC 路由器创建一种方法,以将应该由 Angular 解析的 URL 传递回客户端。
在您的Startup.cs
文件中,在Configure()
方法中,将“spa-fallback”路由添加到现有路由:
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
// when the user types in a link handled by client side routing to the address bar
// or refreshes the page, that triggers the server routing. The server should pass
// that onto the client, so Angular can handle the route
routes.MapRoute(
name: "spa-fallback",
template: "{*url}",
defaults: new { controller = "Home", action = "Index" }
);
});
通过创建一个指向最终加载 Angular 应用程序的控制器和视图的包罗万象的路由,这将允许将服务器未处理的 URL 传递到客户端以进行正确的路由。