我正在尝试在 AngularJS 中构建一个单页应用程序,并在 HTML5 模式下完成客户端路由。如果用户曾经在我的网站上为某个页面添加书签,我知道我需要一个基本的服务器端路由方案,但我真的希望它始终提供我的单个主页并将相同的 URL 传播到客户端路由部分。
这个包罗万象的路由非常适用于只有一层的简单 URL:
routes.MapRoute(
"Default", // Route name
"{*catchall}", // URL with parameters
new { controller = "Home", action = "Index" } // Parameter defaults
);
示例网址:
http://myapp.com/moreInfo
http://myapp.com/contactUs
“moreInfo”和“contactUs”只是 Angular 中的命名路由。单页应用程序的唯一真正入口点是 http://myapp.com .到目前为止,这一切都非常顺利。
但是,当我尝试走多条路线时,应用程序进入无限循环:
http://myapp.com/user/5
这是因为我的服务器端路由不足以将“user/5”URL“传递”到我的客户端应用程序吗?我是否需要做任何特别的事情来确保无论 URL 嵌套多深,它都能正确传递到我的 SPA?
最佳答案
问题不在于路由配置,我对 angular js 和 mvc 4 有类似的设置,下面的路由工作正常。
routes.MapRoute(
name: "Application",
url: "{*url}",
defaults: new { controller = "Home", action = "Index" },
namespaces: new[] { "MyApp.Web.Controllers" });
您是否在 angular 配置方法中将 html5Mode 设置为 true?
$locationProvider.html5Mode(true);
您可能会尝试使用 fiddler 向您的应用发送 get 请求并查看响应。如果它是 301 或 302,那么您有服务器端重定向循环问题。如果它是 200,那么你的 angular/js 代码可能是问题所在。
关于asp.net-mvc - 带有书签的 Angular SPA URL 的 ASP.NET MVC 4 路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19142940/